Dataform 개요

이 문서에서는 Dataform 개념과 프로세스를 소개합니다.

Dataform은 데이터 분석가가 BigQuery에서 데이터 변환을 위한 복잡한 워크플로를 개발, 테스트, 버전 제어, 예약할 수 있게 해주는 서비스입니다.

Dataform을 사용하면 데이터 통합을 위해 추출, 로드, 변환(ELT) 프로세스에서 데이터 변환을 관리할 수 있습니다. 원시 데이터가 소스 시스템에서 추출되어 BigQuery로 로드된 후에 Dataform을 사용하면 잘 정의되고 테스트를 거쳤으며 문서화된 데이터 테이블 제품군으로 원시 데이터를 변환할 수 있습니다.

Dataform을 사용하면 다음과 같은 데이터 변환 작업을 실행할 수 있습니다.

  • 데이터 변환을 위한 워크플로를 개발하고 실행합니다.
  • Git을 통해 워크플로 개발에 대해 팀원과 공동작업하기
  • 다수의 테이블과 테이블 종속 항목 관리하기
  • 소스 데이터를 선언하고 테이블 종속 항목 관리하기
  • 워크플로의 종속 항목 트리 시각화 열람하기
  • 중앙 저장소에서 SQL 코드로 데이터 관리하기
  • JavaScript에서 코드 재사용하기
  • 소스 및 출력 테이블에서 품질 테스트를 통해 데이터 정확성 테스트하기
  • SQL 코드 버전 제어하기
  • SQL 코드 내에서 데이터 테이블 문서화하기

Dataform의 데이터 변환 프로세스

Dataform의 데이터 변환 워크플로는 다음과 같습니다.

  1. Dataform을 사용하여 코드를 관리할 저장소를 만듭니다.
  2. Dataform을 사용하여 개발용 작업공간을 만듭니다.
  3. Dataform을 사용하여 개발 작업공간에서 워크플로를 개발합니다.
  4. Dataform이 Dataform 코어를 SQL로 컴파일합니다.
  5. Dataform이 종속 항목 트리를 실행합니다.

Dataform을 사용하여 코드를 관리할 저장소를 만듭니다.

Dataform 저장소에서 SQL의 확장 프로그램인 Dataform Core를 사용하여 워크플로를 정의하는 SQLX 파일을 작성합니다. Dataform 저장소는 버전 제어를 지원합니다. Dataform 저장소를 서드 파티 Git 제공업체에 연결할 수 있습니다.

Dataform을 사용하여 개발용 작업공간을 만들 수 있습니다.

Dataform Core 개발을 위해 Dataform 저장소 내에 개발 작업공간을 만들 수 있습니다. 개발 작업공간에서 저장소를 변경하고, 컴파일하고, 테스트하고, Git을 통해 기본 저장소에 푸시할 수 있습니다.

Dataform을 사용하여 개발 작업공간에서 Dataform Core를 개발할 수 있습니다.

개발 작업공간에서 테이블, 종속 항목, 변환 로직을 정의하고 문서화하여 워크플로를 빌드할 수 있습니다. JavaScript에서 작업을 구성할 수도 있습니다.

Dataform이 Dataform Core를 컴파일합니다.

컴파일 중에 Dataform은 다음 작업을 실행합니다.

  • Dataform Core를 표준 SQL의 워크플로로 컴파일합니다.
  • CREATE TABLE 또는 INSERT와 같은 상용구 SQL 문을 쿼리 구성과 함께 코드 인라인에 추가합니다.
  • JavaScript를 SQL로 트랜스파일(소스 간 컴파일)합니다.
  • 종속 항목을 확인하고 누락되거나 순환하는 종속 항목을 포함한 오류를 검사합니다.
  • BigQuery에서 실행할 모든 작업의 종속 항목 트리를 빌드합니다.

Dataform 컴파일은 컴파일 일관성을 위해 기본 제공됩니다. 즉, 동일한 코드가 매번 동일한 SQL 컴파일 결과로 컴파일됩니다. Dataform은 인터넷 액세스 없이 샌드박스 환경에서 코드를 컴파일합니다. 컴파일 중에는 외부 API 호출과 같은 추가 작업을 수행할 수 없습니다.

실시간으로 디버깅하려면 개발 작업공간의 대화형 그래프에서 프로젝트의 컴파일된 워크플로를 검사할 수 있습니다.

Dataform은 종속 항목 트리를 실행합니다.

BigQuery에서 Dataform은 다음 작업을 실행합니다.

  • 종속 항목 트리의 순서에 따라 SQL 명령어를 실행합니다.
  • 테이블과 뷰에 대해 어설션 쿼리를 실행하여 데이터 정확성을 확인합니다.
  • 정의한 다른 SQL 작업을 실행합니다.

실행 후에는 모든 분석 목적으로 테이블과 뷰를 사용할 수 있습니다.

로그 보기하여 생성된 테이블, 어설션 통과 또는 실패, 각 작업이 완료되는 데 걸린 시간, 기타 정보를 확인할 수 있습니다. BigQuery에서 실행된 정확한 SQL 코드도 볼 수 있습니다.

Dataform 기능

Dataform을 사용하면 테이블, 증분 테이블 또는 뷰를 개발하고 BigQuery에 배포할 수 있습니다. Dataform은 다음 활동을 위한 웹 환경을 제공합니다.

  • 워크플로 개발
  • GitHub, GitLab, Azure DevOps 서비스, Bitbucket 연결
  • 지속적 통합 및 지속적 배포
  • 워크플로 실행

다음 섹션에서는 Dataform의 주요 기능을 설명합니다.

저장소

각 Dataform 프로젝트는 저장소에 저장됩니다. Dataform 저장소에는 JSON 구성 파일, SQLX 파일, JavaScript 파일 모음이 저장됩니다.

Dataform 저장소에는 다음과 같은 유형의 파일이 포함됩니다.

  • 구성 파일

    구성 JSON 또는 SQLX 파일을 사용하면 워크플로를 구성할 수 있습니다. 여기에는 일반 구성, 실행 일정 또는 새 테이블 및 뷰를 만들기 위한 스키마가 포함됩니다.

  • 정의

    정의는 BigQuery에서 실행할 새 테이블, 뷰, 추가 SQL 작업을 정의하는 SQLX 및 JavaScript 파일입니다.

  • 포함 항목

    include는 프로젝트에 사용할 변수와 함수를 정의할 수 있는 JavaScript 파일입니다.

각 Dataform 저장소는 서비스 계정에 연결됩니다. 저장소를 만들 때 또는 나중에 서비스 계정을 수정할 때 서비스 계정을 선택할 수 있습니다.

기본적으로 Dataform은 프로젝트 번호에서 파생된 서비스 계정을 다음과 같은 형식으로 사용합니다.

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

버전 제어

Dataform은 Git 버전 제어 시스템을 사용하여 프로젝트 파일에 적용된 각 변경사항의 기록을 유지하고 파일 버전을 관리합니다.

각 Dataform 저장소는 자체 Git 저장소를 관리하거나 원격 제3자 Git 저장소에 연결할 수 있습니다. Dataform 저장소를 GitHub, GitLab, Azure DevOps Services, Bitbucket 저장소에 연결할 수 있습니다.

사용자는 Dataform 워크스페이스 내에서 워크플로 코드의 버전을 제어합니다. Dataform 작업공간에서 저장소에서 변경사항을 가져오고 모든 변경사항 또는 선택한 변경사항을 커밋한 다음 저장소의 Git 브랜치로 푸시할 수 있습니다.

워크플로 개발

Dataform에서는 개발 작업공간 내의 파일과 디렉터리를 변경합니다. 개발 작업공간은 Git 저장소 콘텐츠의 가상 사본으로서 수정 가능합니다. Dataform은 세션 간에 개발 작업공간의 파일 상태를 보존합니다.

개발 작업공간에서 SQLX 및 JavaScript 또는 JavaScript만으로 Dataform Core를 사용하여 SQL 워크플로 작업을 개발할 수 있습니다. Dataform 코어 또는 JavaScript 코드의 형식을 자동으로 지정할 수 있습니다.

테이블이나 어설션과 같은 Dataform 워크플로의 각 요소는 Dataform이 BigQuery에서 실행하는 작업에 해당합니다. 예를 들어 테이블 정의 파일은 BigQuery에서 테이블을 만들거나 업데이트하는 작업입니다.

Dataform 작업공간에서 다음과 같은 워크플로 작업을 개발할 수 있습니다.

JavaScript를 사용하여 Dataform 워크플로 코드를 다음과 같은 방법으로 재사용할 수 있습니다.

Dataform은 작업공간의 워크플로 코드를 실시간으로 컴파일합니다. 워크스페이스에서 컴파일된 쿼리와 각 파일의 작업 세부정보를 볼 수 있습니다. 수정된 파일이나 저장소에서 컴파일 상태와 오류를 볼 수도 있습니다.

컴파일된 SQL 쿼리를 BigQuery에 실행하기 전에 출력을 테스트하려면 Dataform 작업공간에서 쿼리 미리보기를 실행하면 됩니다.

작업공간에 정의된 전체 워크플로를 검사하려면 워크플로의 모든 컴파일된 작업과 해당 작업 간의 관계를 보여주는 컴파일된 대화형 그래프를 확인하면 됩니다.

워크플로 컴파일

Dataform은 워크플로 설정 파일에서 구성된 기본 컴파일 설정을 사용하여 작업공간의 워크플로 코드를 실시간으로 SQL로 컴파일하여 작업공간의 컴파일 결과를 만듭니다.

컴파일 설정을 재정의하여 Dataform에서 워크플로를 컴파일 결과로 컴파일하는 방식을 맞춤설정할 수 있습니다.

작업공간 컴파일 재정의를 사용하면 저장소의 모든 작업공간에 대한 컴파일 재정의를 구성할 수 있습니다. 동적 작업공간 재정의를 설정하여 각 작업공간에 맞는 맞춤 컴파일 결과를 만들어 작업공간을 격리된 개발 환경으로 전환할 수 있습니다. Dataform이 작업공간의 콘텐츠를 실행하고, 모든 컴파일된 테이블의 이름에 프리픽스를 추가하며, 기본 스키마에 서픽스를 추가하는 Google Cloud 프로젝트를 재정의할 수 있습니다.

출시 구성에서는 Dataform 저장소의 컴파일 결과를 만들기 위한 컴파일 설정 템플릿을 구성할 수 있습니다. 출시 구성에서는 Dataform이 컴파일 결과를 실행하고, 모든 컴파일된 테이블의 이름에 프리픽스를 추가하며, 기본 스키마에 서픽스를 추가하고, 컴파일 변수를 추가하는 Google Cloud 프로젝트를 재정의할 수 있습니다. 또한, 컴파일 결과의 생성 빈도를 설정할 수 있습니다. 선택한 출시 구성에서 생성된 컴파일 결과의 실행을 예약하려면 워크플로 구성을 만들면 됩니다.

워크플로 실행

워크플로 실행 중에 Dataform은 워크플로의 컴파일 결과를 실행하여 BigQuery에서 애셋을 만들거나 업데이트합니다.

BigQuery의 워크플로에 정의된 테이블과 뷰를 만들거나 새로고침하려면 개발 작업공간에서 워크플로 실행을 수동으로 시작하거나 실행을 예약하면 됩니다.

다음과 같은 방법으로 BigQuery에서 Dataform 실행을 예약할 수 있습니다.

오류를 디버깅하기 위해 다음 방법으로 실행을 모니터링할 수 있습니다.

Dataform Core

Dataform Core는 SQL 테이블 및 워크플로를 만들기 위한 오픈소스 메타 언어입니다. Dataform Core는 종속 항목 관리 시스템, 자동화된 데이터 품질 테스트, 데이터 문서를 제공하여 SQL을 확장합니다.

다음과 같은 목적으로 Dataform Core를 사용할 수 있습니다.

  • 테이블, 뷰, 구체화된 뷰 또는 증분 테이블 정의
  • 데이터 변환 로직 정의
  • 소스 데이터 선언 및 테이블 종속 항목 관리
  • 코드 내의 테이블 및 열 설명 문서화
  • 여러 쿼리에서 함수와 변수 재사용
  • 데이터 일관성을 보장하기 위한 데이터 어설션 작성

Dataform에서는 Dataform Core를 사용하여 워크플로를 개발하고 BigQuery에 애셋을 배포할 수 있습니다.

Dataform Core는 Dataform CLI도 포함된 오픈소스 Dataform 데이터 모델링 프레임워크의 일부입니다. Google Cloud외부의 Dataform CLI를 통해 로컬에서 Dataform Core를 컴파일하고 실행할 수 있습니다.

Dataform Core를 사용하려면 SQLX 파일을 작성합니다. 각 SQLX 파일에는 Dataform이 BigQuery 내에서 만들고 업데이트하는 데이터베이스 관계를 정의하는 쿼리가 포함되어 있습니다.

Dataform은 Dataform Core 코드를 실시간으로 컴파일하여 BigQuery에서 실행할 수 있는 SQL 컴파일 결과를 만듭니다.

Dataform 컴파일은 컴파일 일관성을 위해 기본 제공됩니다. 즉, 동일한 코드가 매번 동일한 SQL 컴파일 결과로 컴파일됩니다. Dataform은 인터넷 액세스 없이 샌드박스 환경에서 코드를 컴파일합니다. 컴파일 중에는 외부 API 호출과 같은 추가 작업을 수행할 수 없습니다.

SQLX 파일 구성 블록

SQLX 파일은 구성 블록과 본문으로 구성됩니다. 모든 구성 속성과 구성 블록 자체는 선택사항입니다. 따라서 모든 일반 SQL 파일은 Dataform에서 있는 그대로 실행하는 유효한 SQLX 파일입니다.

config 블록에서 다음 작업을 실행할 수 있습니다.

쿼리 메타데이터 지정

Dataform이 구성 메타데이터를 사용하여 쿼리를 BigQuery(예: 출력 테이블 유형, 대상 데이터베이스 또는 라벨)로 구체화하는 방법을 구성할 수 있습니다.

데이터 문서화

구성 블록에서 직접 테이블 및 해당 필드를 문서화할 수 있습니다. 테이블 문서가 BigQuery로 직접 푸시됩니다. 이 문서를 파싱하여 다른 도구로 푸시할 수 있습니다.

데이터 품질 테스트 정의

어설션이라는 데이터 품질 테스트를 정의하여 고유성, null 값 또는 커스텀 조건을 확인할 수 있습니다. Dataform은 테이블 생성 후 구성 블록에 정의된 어설션을 워크플로 종속 항목 트리에 추가합니다. 구성 블록 외부의 별도 SQLX 파일에서 어설션을 정의할 수도 있습니다.

다음 코드 샘플은 출력 테이블 유형을 정의하고, 테이블을 문서화하고, SQLX 파일의 config 블록에서 품질 테스트를 정의하는 방법을 보여줍니다.

config {
  type: "table",
    description: "This table joins orders information from OnlineStore & payment information from PaymentApp",
  columns: {
    order_date: "The date when a customer placed their order",
    id: "Order ID as defined by OnlineStore",
    order_status: "The status of an order e.g. sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment e.g. pending, paid",
    payment_method: "How the customer chose to pay",
    item_count: "The number of items the customer ordered",
    amount: "The amount the customer paid"
  },
    assertions: {
    uniqueKey: ["id"]
  }
}

SQLX 파일 본문

SQLX 파일의 본문에서 다음 작업을 실행할 수 있습니다.

테이블 정의

새 테이블을 정의하려면 SQL SELECT 문과 ref 함수를 사용하면 됩니다.

ref 함수는 Dataform의 종속 항목 관리에 중요한 SQLX 기본 제공 함수입니다. ref 함수를 사용하면 데이터 테이블의 스키마 및 테이블 이름을 하드 코딩하는 대신 Dataform 프로젝트에 정의된 테이블을 참조할 수 있습니다.

Dataform은 ref 함수를 사용하여 만들거나 업데이트할 모든 테이블의 종속 항목 트리를 빌드합니다. 컴파일 후 Dataform은 CREATE, REPLACE, INSERT 같은 상용구 문을 추가합니다.

다음 코드 샘플은 ref 함수를 사용하여 SQLX 파일에서 테이블을 참조하는 방법을 보여줍니다.

config { type: "table" }

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM ${ref("store_clean")}

GROUP BY 1, 2, 3

출력은 다음과 비슷합니다.

CREATE OR REPLACE TABLE Dataform.orders AS

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM Dataform_stg.store_clean

GROUP BY 1, 2, 3

다른 Dataform Core 기본 제공 함수를 사용하여 조건부로 코드를 실행하는 것과 같은 추가 종속 항목 관리에 대한 자세한 내용은 Dataform Core 참조를 확인하세요.

추가 SQL 작업 정의

테이블 또는 뷰를 만들기 전이나 후에 SQL 문을 한 개 이상 실행하도록 Dataform을 구성하려면 사전 쿼리 및 쿼리 후 작업을 지정하면 됩니다.

다음 코드 샘플은 쿼리 후 작업에서 테이블 또는 뷰 액세스 권한을 구성하는 방법을 보여줍니다.

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}

SQL 코드 캡슐화

SQL 블록의 반복 부분을 생성하기 위해 재사용 가능한 함수를 정의하려면 JavaScript 블록을 사용하면 됩니다. 블록이 정의된 SLQX 파일 내에서만 JavaScript 블록에 정의된 코드를 재사용할 수 있습니다. 전체 저장소에서 코드를 재사용하려면 include 만들기를 수행하면 됩니다.

쿼리를 동적으로 수정하려면 본문 어디에서든 인라인 JavaScript를 사용하면 됩니다.

다음 코드 샘플은 SQLX 파일에서 JavaScript 블록을 정의하고 쿼리 내에서 인라인을 사용하는 방법을 보여줍니다.

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

제한사항

Dataform에는 다음과 같은 알려진 제한사항이 있습니다.

  • Google Cloud 의 Dataform은 일반 V8 런타임에서 실행되며 Node.js에서 제공하는 추가 기능과 모듈을 지원하지 않습니다. 기존 코드베이스에 Node.js 모듈이 필요한 경우 이러한 종속 항목을 삭제해야 합니다.

    package.json에 이름 필드가 없는 프로젝트는 패키지가 설치될 때마다 package-lock.json에서 diff를 생성합니다. 이러한 결과를 방지하려면 package.jsonname 속성을 추가해야 합니다.

  • package.json의 종속 항목에 대한 git+https:// URL은 지원되지 않습니다.

    이러한 URL을 일반 https:// 아카이브 URL로 변환합니다. 예를 들어 git+https://github.com/dataform-co/dataform-segment.git#1.5https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz로 변환합니다.

  • 단위 테스트를 수동으로 실행할 수는 없습니다.

  • 개발 작업공간에서는 파일 콘텐츠를 검색할 수 없습니다.

  • Dataform Core 3.0.0.부터 Dataform은 Docker 이미지를 배포하지 않습니다. Dataform의 자체 Docker 이미지를 빌드할 수 있으며, 이를 사용하여 Dataform CLI와 상응하는 명령어를 실행할 수 있습니다. 자체 Docker 이미지를 빌드하려면 Docker 문서의 애플리케이션 컨테이너화를 참고하세요.

  • 다음 Dataform API 메서드는 * 와일드 카드 항목을 잘못된 요청으로 처리하고 field_mask가 생략된 경우 설정된 필드 대신 모든 필드를 업데이트하여 AIP.134 가이드라인을 준수하지 않습니다.

다음 단계