Dataform Core 개요

이 문서에서는 Dataform Core를 소개하고 Dataform에서 이를 사용하는 방법을 보여줍니다.

Dataform Core 개요

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

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

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

Dataform에서는 Dataform Core를 사용하여 SQL 워크플로를 개발하고 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 파일입니다.

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

쿼리 메타데이터 지정

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

데이터 문서화

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

데이터 품질 테스트 정의

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

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

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 "..."

다음 단계