Dataform에서 테이블은 워크플로를 구성하는 객체 유형 중 하나입니다. 워크플로에 선언된 데이터 소스 또는 워크플로의 다른 테이블에서 데이터를 참조하는 테이블을 만들 수 있습니다. Dataform은 테이블 정의를 실시간으로 SQL로 컴파일합니다. 실행을 트리거하면 Dataform은 SQL 코드를 실행하고 BigQuery에서 정의된 테이블을 만듭니다.
type: "table"
SQLX 파일에서 다음과 같은 테이블 유형을 만들 수 있습니다.
table
: 일반 테이블입니다.incremental
: 증분 테이블입니다.view
: 표 보기 자세한 내용은 뷰 소개를 참고하세요.materialized
: 구체화된 테이블 뷰입니다. 자세한 내용은 구체화된 뷰 소개를 참고하세요.
테이블 파티션 및 클러스터를 정의할 수도 있습니다.
워크플로에서 표의 목적이나 다른 표와의 관계를 기록하려면 표 또는 선택한 열에 문서를 추가하면 됩니다.
테이블의 데이터를 특정 조건에 대해 테스트하려면 어설션이라는 데이터 품질 테스트 쿼리를 만들 수 있습니다. Dataform은 워크플로를 업데이트할 때마다 어설션을 실행하고 어설션이 실패할 경우 알림을 제공합니다.
database
또는 schema
와 같은 기본 테이블 설정을 재정의하고, 테이블 만들기를 사용 중지하거나, 테이블 만들기 전후에 SQL 문을 실행하려면 추가 테이블 설정을 구성할 수 있습니다.
다음을 수행하도록 추가 테이블 설정을 구성할 수 있습니다.
database
또는schema
와 같은 기본 테이블 설정을 재정의합니다.- 테이블 생성을 사용 중지합니다.
- 테이블 생성 전이나 후에 SQL 문을 실행합니다.
테이블을 실행한 후 BigQuery에서 테이블을 구성하려면 BigQuery 라벨을 추가하면 됩니다. 자세한 내용은 라벨 소개를 참고하세요.
테이블 열 수준에서 데이터 액세스를 제한하려면 BigQuery 정책 태그를 추가하면 됩니다. 자세한 내용은 열 수준 액세스 제어 소개를 참고하세요.
type: "table"
SQLX 파일에 테이블을 정의하는 것 외에 type: "operations"
SQLX 파일에 빈 SQLX 파일에 커스텀 SQL 쿼리를 정의하여 빈 테이블을 생성할 수 있습니다.
다른 서비스에서 데이터로 채울 수 있도록 빈 테이블을 만들 수 있습니다.
시작하기 전에
Google Cloud 콘솔에서 Dataform 페이지로 이동합니다.
선택사항: 데이터 소스를 선언합니다.
필요한 역할
이 문서의 태스크를 완료하는 데 필요한 권한을 얻으려면 관리자에게 작업공간에 대한 Dataform 편집자 (roles/dataform.editor
) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
테이블 만들기
이 섹션에서는 Dataform에서 Dataform Core를 사용하여 테이블을 만드는 방법을 보여줍니다.
테이블 정의에 대한 정보
테이블을 정의하려면 테이블 유형을 정의하고 type: "table"
SQLX 파일에 SELECT
문을 작성합니다. 그러면 Dataform이 Dataform Core 코드를 SQL로 컴파일하고 SQL 코드를 실행하며 BigQuery에서 정의된 테이블을 만듭니다.
Dataform Core SELECT
문에서 테이블 구조를 정의하고 워크플로의 다른 객체를 참조합니다.
type: "table"
SQLX 파일에 테이블을 정의하는 것 외에 type: "operations"
SQLX 파일에 커스텀 SQL 쿼리를 정의하여 빈 테이블을 생성할 수 있습니다.
자세한 내용은 빈 테이블 만들기를 참고하세요.
ref
로 종속 항목 참조
SELECT
문에서 워크플로 객체를 참조하고 종속 항목으로 자동 추가하려면 ref
함수를 사용하세요. Dataform은 올바른 파이프라인 순서 지정 보장을 위해 종속 항목에 영향을 받는 테이블보다 종속 항목을 먼저 실행합니다.
ref
함수는 Dataform의 종속 항목 관리에 중요한 기본 제공 Dataform Core 함수입니다. ref
함수를 사용하면 스키마 및 테이블 이름을 하드 코딩하는 대신 Dataform 워크플로에 정의된 다음 객체를 참조하고 자동으로 종속시킬 수 있습니다.
- 지원되는 모든 테이블 유형의 테이블
- 데이터 소스 선언
hasOutput
속성이true
로 설정된 커스텀 SQL 작업
Dataform은 ref
함수를 사용하여 만들거나 업데이트할 모든 테이블의 종속 항목 트리를 빌드합니다.
컴파일 후 Dataform은 CREATE
, REPLACE
, INSERT
, MERGE
와 같은 상용구 문을 SQL 문에 추가합니다.
다음 코드 샘플은 ref
함수를 사용하는 테이블 정의를 보여줍니다.
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
ref
함수에서 사용하려는 테이블 또는 데이터 소스 선언의 이름을 제공합니다. 일반적으로 이 값은 해당 테이블 또는 데이터 소스 선언이 정의된 SQLX 파일의 파일 이름입니다.
테이블 이름이 재정의된 경우 ref
함수에서 재정의된 이름을 사용합니다.
예를 들어 config { name: "overridden_name" }
이 있는 테이블을 ref("overridden_name")
으로 참조합니다. 테이블 이름 재정의에 관한 자세한 내용은 추가 테이블 설정 구성을 참고하세요.
서로 다른 스키마에 동일한 이름의 테이블이 여러 개 있는 경우 ref
함수에 스키마 이름과 테이블 이름이라는 두 가지 인수를 제공하여 특정 테이블을 참조할 수 있습니다.
다음 코드 샘플은 특정 스키마 내에서 테이블을 지정하는 두 개의 인수가 있는 ref
함수를 보여줍니다.
config { type: "table" }
SELECT * FROM ${ref("schema", "store_clean")}
또한 SELECT
문의 ref
함수에서 참조되지 않는 테이블, 어설션, 데이터 소스 선언 또는 커스텀 SQL 작업의 config
블록에 테이블 종속 항목을 추가할 수도 있습니다. Dataform은 종속 테이블보다 이러한 종속 항목을 먼저 실행합니다.
다음 코드 샘플은 config
블록의 테이블 종속 항목을 보여줍니다.
config { dependencies: [ "unreferenced_table" ] }
SELECT * FROM ...
워크플로의 종속 항목 관리에 관한 자세한 내용은 종속 항목 선언을 참고하세요.
resolve
로 다른 테이블 참조
resolve
함수를 사용하면 ref
함수와 같은 SELECT
문에서 테이블 또는 데이터 소스 선언을 참조할 수 있지만 참조를 종속 항목으로 추가할 수는 없습니다. 즉, resolve
함수를 사용하여 참조된 객체는 resolve
함수를 사용하는 테이블 실행에 영향을 미치지 않습니다.
기본 제공 Dataform Core 함수에 대한 자세한 내용은 Dataform Core 참조를 확인하세요.
테이블 정의를 위한 SQLX 파일 만들기
테이블 정의 SQLX 파일을 definitions/
디렉터리에 저장합니다. definitions/
디렉터리에 새 SQLX 파일을 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Dataform 페이지로 이동합니다.
저장소를 열려면 저장소 이름을 클릭합니다.
개발 작업공간을 열려면 작업공간 이름을 클릭합니다.
파일 창에서
definitions/
옆에 있는 더보기를 클릭합니다.파일 만들기를 클릭합니다.
파일 경로 추가 필드에
definitions/
를 입력하고 파일 이름 다음에.sqlx
를 입력합니다. 예를 들면definitions/my-table.sqlx
입니다.파일 이름에는 숫자, 문자, 하이픈, 밑줄만 포함할 수 있습니다.
파일 만들기를 클릭합니다.
테이블 유형 정의
새 테이블 유형 정의를 만들려면 다음 단계를 따르세요.
- 개발 작업공간의 파일 창에서
definitions/
디렉터리를 확장합니다. - 수정할 테이블 정의 SQLX 파일을 선택합니다.
파일에 다음 코드 스니펫을 입력합니다.
config { type: "TABLE_TYPE" }
TABLE_TYPE를 다음 표 유형 중 하나로 바꿉니다.
table
incremental
view
(선택사항): 구체화된 뷰를 정의하려면
type: "view"
아래에materialized
속성을 다음 형식으로 입력합니다.config { type: "view", materialized: true }
자세한 내용은 ITableConfig를 참고하세요.
(선택사항): 형식을 클릭합니다.
테이블 구조 및 종속 항목 정의
테이블 정의 SELECT
문을 작성하고 테이블 구조와 종속 항목을 정의하려면 다음 단계를 따르세요.
- 개발 작업공간의 파일 창에서
definitions/
디렉터리를 펼칩니다. - 수정할 테이블 정의 SQLX 파일을 선택합니다.
config
블록 아래에SELECT
문을 작성합니다.- (선택사항): 형식을 클릭합니다.
다음 코드 샘플은 SELECT
문이 있고 ref
함수가 있는 테이블 정의를 보여줍니다.
config { type: "table" }
SELECT
customers.id AS id,
customers.first_name AS first_name,
customers.last_name AS last_name,
customers.email AS email,
customers.country AS country,
COUNT(orders.id) AS order_count,
SUM(orders.amount) AS total_spent
FROM
dataform-samples.dataform_sample.crm_customers AS customers
LEFT JOIN ${ref('order_stats')} orders
ON customers.id = orders.customer_id
WHERE
customers.id IS NOT NULL
AND customers.first_name <> 'Internal account'
AND country IN ('UK', 'US', 'FR', 'ES', 'NG', 'JP')
GROUP BY 1, 2, 3, 4, 5
수동 테이블 종속 항목 추가
SELECT
문에 참조되지 않지만 현재 테이블 전에 실행해야 하는 테이블 종속 항목을 추가하려면 다음 단계를 따르세요.
- 개발 작업공간의 파일 창에서
definitions/
디렉터리를 펼칩니다. - 수정할 테이블 정의 SQLX 파일을 선택합니다.
테이블의
config
블록에 다음 코드 스니펫을 입력합니다.dependencies: [ "DEPENDENCY_TABLE", ]
DEPENDENCY_TABLE을 종속 항목으로 추가하려는 테이블의 파일 이름으로 바꿉니다. 파일 이름을 여러 개 입력할 수 있습니다.
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 테이블 정의 파일의 config
블록에 수동 테이블 종속 항목으로 추가된 두 개의 테이블을 보여줍니다.
config { dependencies: [ "some_table", "some_other_table" ] }
테이블 파티션 및 클러스터 만들기
이 섹션에서는 Dataform Core를 사용하여 테이블 파티션 및 클러스터를 만드는 방법을 보여줍니다. BigQuery는 파티션을 나눈 테이블과 테이블 클러스터링을 지원합니다. 자세한 내용은 파티션을 나눈 테이블 소개 및 클러스터링된 테이블 만들기 및 사용을 참고하세요.
테이블 파티션 만들기
테이블 파티션을 만들려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 테이블 정의 SQLX 파일을 엽니다.
config
블록에서 테이블 유형 선언 아래에 다음 형식으로bigquery
블록을 추가합니다.config { type: "table", bigquery: { } }
bigquery
블록에 다음 코드 스니펫을 입력합니다.partitionBy: "PARTITION_EXPRESSION"
PARTITION_EXPRESSION을 테이블 파티션 나누기의 표현식으로 바꿉니다.
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 테이블 정의 SQLX 파일에서 시간별로 테이블을 파티셔닝하는 방법을 보여줍니다.
config {
type: "table",
bigquery: {
partitionBy: "DATETIME_TRUNC(<timestamp_column>, HOUR)"
}
}
다음 코드 샘플은 테이블 정의 SQLX 파일에서 정수 값으로 테이블을 파티셔닝하는 방법을 보여줍니다.
config {
type: "table",
bigquery: {
partitionBy: "RANGE_BUCKET(<integer_column>, GENERATE_ARRAY(0, 1000000, 1000))"
}
}
파티션 필터 설정
파티션 필터를 설정하려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 파티션을 나눈 테이블 정의 SQLX 파일을 엽니다.
bigquery
블록에 다음 코드 스니펫을 입력합니다.requirePartitionFilter : true
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 파티션된 테이블 SQLX 파일의 bigquery
블록에 설정된 파티션 필터를 보여줍니다.
config {
type: "table",
bigquery: {
partitionBy: "DATE(ts)",
requirePartitionFilter : true
}
}
SELECT CURRENT_TIMESTAMP() AS ts
BigQuery의 파티션 필터에 대한 자세한 내용은 파티션을 나눈 테이블에 필수 파티션 필터 속성 설정을 참조하세요.
파티션 보관 기간 설정
파티션을 나눈 테이블의 모든 파티션 보관을 제어하려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 파티션을 나눈 테이블 정의 SQLX 파일을 엽니다.
bigquery
블록에 다음 코드 스니펫을 입력합니다.partitionExpirationDays: NUMBER_OF_DAYS
NUMBER_OF_DAYS를 파티션을 보관할 일수로 바꿉니다.
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 파티션된 테이블 SQLX 파일의 bigquery
블록에서 파티션의 보관 기간이 14일로 설정된 것을 보여줍니다.
config {
type: "table",
bigquery: {
partitionBy: "DATE(ts)",
partitionExpirationDays: 14,
}
}
SELECT CURRENT_TIMESTAMP() AS ts
테이블 클러스터 만들기
테이블 클러스터를 만들려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 테이블 정의 SQLX 파일을 엽니다.
bigquery
블록에 다음 코드 스니펫을 입력합니다.clusterBy: ["CLUSTER_COLUMN"]
CLUSTER_COLUMN을 테이블을 클러스터링할 열의 이름으로 바꿉니다. 자세한 내용은 clustering_column_list를 참고하세요.
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 name
및 revenue
열로 클러스터링된 파티션 테이블을 보여줍니다.
config {
type: "table",
bigquery: {
partitionBy: "DATE(ts)",
clusterBy: ["name", "revenue"]
}
}
SELECT CURRENT_TIMESTAMP() as ts, name, revenue
증분 테이블 구성
이 섹션에서는 Dataform Core를 사용하여 증분 테이블을 구성하는 방법을 보여줍니다.
증분 테이블 정보
Dataform은 테이블 유형에 따라 테이블을 다르게 업데이트합니다. 테이블이나 뷰를 실행할 때마다 Dataform은 전체 테이블이나 뷰를 처음부터 다시 빌드합니다.
증분 테이블을 정의하면 Dataform은 처음에만 증분 테이블을 처음부터 빌드합니다. 후속 실행 중에 Dataform은 구성한 조건에 따라 새 행을 증분 테이블에 삽입하거나 병합합니다.
Dataform은 증분 테이블에 이미 있는 열에만 새 행을 삽입합니다. 새 열을 추가하는 등 증분 테이블 정의 쿼리를 변경하는 경우 테이블을 처음부터 다시 빌드해야 합니다. 이렇게 하려면 다음에 테이블 실행을 트리거할 때 전체 새로고침으로 실행 옵션을 선택합니다.
다음은 증분 테이블의 몇 가지 일반적인 사용 사례입니다.
- 성능 최적화
- 웹 로그나 분석 데이터와 같은 일부 데이터 유형의 경우 전체 테이블을 다시 처리하는 대신 새 레코드만 처리하는 것이 좋습니다.
- 지연 시간 감소
- 증분 테이블을 사용하여 워크플로를 빠르게 자주 실행하여 출력 테이블의 다운스트림 지연 시간을 줄일 수 있습니다.
- 일일 스냅샷
- 프로덕션 데이터베이스에 저장된 사용자 설정의 종단 분석을 위해 테이블 데이터의 일일 스냅샷을 만들도록 증분 테이블을 구성할 수 있습니다.
증분 테이블에서 행의 하위 집합 처리
각 실행 중에 Dataform에서 처리할 행의 하위 집합을 결정하려면 증분 테이블 SQLX 정의 파일에 조건부 WHERE
절을 추가합니다. WHERE
절에서 증분 조건과 비증분 조건을 지정할 수 있습니다. Dataform은 전체 새로고침 없이 테이블을 실행하는 동안 증분 조건을 적용하고 전체 새로고침을 사용한 실행 중에 비증분 조건을 적용합니다.
증분 테이블을 구성하려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 증분 테이블 정의 SQLX 파일을 엽니다.
WHERE
절을 다음 형식으로 입력합니다.config { type: "incremental" } SELECT_STATEMENT ${when(incremental(), `WHERE INCREMENTAL_CONDITION`, `WHERE NON_INCREMENTAL_CONDITION`) }
다음을 바꿉니다.
- SELECT_STATEMENT: 테이블을 정의하는
SELECT
문입니다. - INCREMENTAL_CONDITION: 전체 새로고침 없이 테이블 실행 중에 Dataform이 처리할 행을 선택하기 위해
WHERE
절에 지정하는 조건 - NON_INCREMENTAL_CONDITION: 전체 새로고침으로 테이블을 실행하는 동안 Dataform이 처리할 행을 선택하기 위해
WHERE
절에 지정하는 조건
- SELECT_STATEMENT: 테이블을 정의하는
(선택사항): 형식을 클릭합니다.
다음 코드 샘플에서는 productiondb.logs
테이블 행을 점진적으로 처리하는 증분 테이블을 보여줍니다.
config { type: "incremental" }
SELECT timestamp, message FROM ${ref("productiondb", "logs")}
${when(incremental(),
`WHERE date > (SELECT MAX(date) FROM ${self()}) AND country = "UK"`,
`WHERE country = "UK"`)}
다음 코드 샘플은 productiondb.customers
테이블의 스냅샷을 만드는 증분 테이블을 보여줍니다.
config { type: "incremental" }
SELECT CURRENT_DATE() AS snapshot_date, customer_id, name, account_settings FROM ${ref("productiondb", "customers")}
${when(incremental(), `WHERE snapshot_date > (SELECT MAX(snapshot_date) FROM ${self()})`) }
증분 테이블에서 행 병합
증분 테이블에 선택한 열 조합에 해당하는 행이 하나만 포함되도록 하려면 선택한 열을 uniqueKey
로 설정하여 동일한 uniqueKey
값을 가진 행을 병합합니다. 테이블을 업데이트할 때 Dataform은 행을 추가하는 대신 동일한 uniqueKey
값으로 행을 병합합니다.
증분 테이블에서 병합을 구성하려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 증분 테이블 정의 SQLX 파일을 선택합니다.
config
블록에서 선택한 열을 다음 형식으로uniqueKey
로 설정합니다.uniqueKey: ["COLUMN_NAME"]
COLUMN_NAME을 선택한 열의 이름으로 바꿉니다.
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 항상 행이 하나 포함되도록 transaction_id
열을 uniqueKey
로 설정한 증분 테이블을 보여줍니다.
config {
type: "incremental",
uniqueKey: ["transaction_id"]
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
증분 테이블에서 행 필터링
파티션을 나눈 증분 테이블에서 Dataform 전체 테이블을 검색하여 일치하는 행을 찾지 않도록 하려면 레코드의 하위 집합만 고려하도록 updatePartitionFilter
를 설정합니다.
다음 코드 샘플은 uniqueKey
및 updatePartitionFilter
속성을 설정하여 병합이 구성된 파티션을 나눈 증분 테이블을 보여줍니다.
config {
type: "incremental",
uniqueKey: ["transaction_id"],
bigquery: {
partitionBy: "DATE(timestamp)",
updatePartitionFilter:
"timestamp >= timestamp_sub(current_timestamp(), interval 24 hour)"
}
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
파티션을 나눈 테이블에서 수집할 때 전체 테이블 스캔 방지
파티션을 나눈 테이블을 참조하는 증분 테이블을 만들 때는 각 증분 업데이트 중에 파티션을 나눈 테이블의 전체 테이블 스캔을 방지하도록 테이블 쿼리를 빌드하는 것이 좋습니다.
테이블 쿼리에서 상수 표현식을 사용하여 BigQuery가 증분 테이블을 업데이트하기 위해 스캔하는 파티션 수를 제한할 수 있습니다. 파티션을 나눈 테이블의 값을 상수 표현식으로 변환하려면 BigQuery 스크립팅을 사용하여 값을 pre_operations
블록의 변수로 선언합니다. 그런 다음 변수를 SELECT
쿼리의 WHERE
절에서 상수 표현식으로 사용합니다.
이 구성을 사용하면 Dataform은 전체 테이블을 스캔하지 않고 참조된 파티션을 나눈 테이블의 가장 최신 파티션을 기반으로 증분 테이블을 업데이트합니다.
파티션된 테이블을 참조하고 전체 테이블 스캔을 방지하는 증분 테이블을 구성하려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 증분 테이블 정의 SQLX 파일을 선택합니다.
pre_operations
블록에서 BigQuery 스크립팅으로 변수를 선언합니다.- 선언된 변수를 참조하는
WHERE
절을 사용하여 테이블을 정의하는SELECT
문을 필터링합니다. - (선택사항): 형식을 클릭합니다.
다음 코드 샘플은 참조된 raw_events
테이블이 event_timestamp
로 파티션된 증분 테이블을 보여줍니다.
config {
type: "incremental",
}
pre_operations {
DECLARE event_timestamp_checkpoint DEFAULT (
${when(incremental(),
`SELECT max(event_timestamp) FROM ${self()}`,
`SELECT timestamp("2000-01-01")`)}
)
}
SELECT
*
FROM
${ref("raw_events")}
WHERE event_timestamp > event_timestamp_checkpoint
위의 코드 샘플에서 event_timestamp_checkpoint
변수는 pre_operations
블록에 정의되어 있습니다. 그러면 event_timestamp_checkpoint
변수가 WHERE
절에서 상수 표현식으로 사용됩니다.
전체 새로고침으로 증분 테이블을 처음부터 다시 빌드
--full-refresh
옵션으로 명령줄 인터페이스를 사용하거나 워크플로 실행을 트리거할 때 전체 새로고침으로 실행 옵션을 사용하여 증분 테이블을 강제로 처음부터 다시 빌드할 수 있습니다.
개발 작업공간에서 또는 Dataform CLI를 사용하여 전체 새로고침 옵션을 선택하면 Dataform이 실행 중에 ${when(incremental(), ... }
파라미터를 무시하고 CREATE OR REPLACE
문을 사용하여 테이블을 다시 만듭니다.
증분 테이블을 전체 새로고침으로부터 보호
증분 테이블이 처음부터 다시 빌드되고 데이터가 손실되지 않도록 하려면 증분 테이블을 protected
로 설정하면 됩니다. 데이터 소스가 임시인 경우 증분 테이블이 다시 빌드되지 않도록 할 수 있습니다.
증분 테이블을 protected
로 표시하려면 다음 단계를 따르세요.
- 개발 작업공간으로 이동합니다.
- 파일 창에서
definitions/
를 펼칩니다. - 증분 테이블 정의 SQLX 파일을 선택합니다.
config
블록에protected: true
를 입력합니다.- (선택사항): 형식을 클릭합니다.
다음 코드 샘플은 protected
로 표시된 증분 테이블을 보여줍니다.
config {
type: "incremental",
protected: true
}
SELECT ...
테이블 문서 추가
이 섹션에서는 테이블 및 테이블 열과 레코드에 대한 설명을 Dataform 핵심 SQLX 파일에 추가하는 방법을 보여줍니다.
Dataform의 모든 테이블 유형(테이블, 증분 테이블, 뷰)에 테이블, 열, 레코드 설명을 추가할 수 있습니다.
다음을 문서화하는 것이 좋습니다.
- 테이블의 용도
- 테이블의 열 또는 레코드의 콘텐츠 또는 역할
- 테이블과 워크플로의 다른 작업(예: 현재 테이블에 종속된 테이블 또는 뷰)의 관계
- 테이블에 적용된 어설션
- 테이블에 적용된 전처리 또는 후처리
- 테이블의 소유자. 즉, 테이블을 만든 사용자입니다. 이 정보는 여러 팀원이 워크플로에서 작업하는 경우에 유용할 수 있습니다.
테이블 설명 추가
SQLX 파일의 테이블에 설명을 추가하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Dataform 페이지로 이동합니다.
저장소를 선택합니다.
개발 작업공간을 선택합니다.
파일 창에서 수정하려는 테이블 정의 SQLX 파일을 클릭합니다.
파일의
config
블록에 다음 형식으로 테이블 설명을 입력합니다.description: "Description of the table",
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 SQLX 테이블 정의 파일의 config
블록에 추가된 테이블 설명을 보여줍니다.
config {
type: "table",
description: "Description of the table",
}
열 및 레코드 설명 추가
SQLX 파일에 개별 열 및 레코드에 대한 설명을 추가하려면 다음 단계를 따르세요.
- 테이블 정의 파일의
config
블록에columns: {}
을 입력합니다. columns: {}
내에서 다음 형식으로 열 설명을 입력합니다.column_name: "Description of the column",
columns: {}
내에서 다음 형식으로 레코드 설명을 입력합니다.record_name: { description: "Description of the record", columns: { record_column_name: "Description of the record column" } }
(선택사항): 형식을 클릭합니다.
다음 코드 샘플은 SQLX 테이블 정의 파일의 config
블록에 있는 테이블, 열, 레코드 설명을 보여줍니다.
config {
type: "table",
description: "Description of the table.",
columns: {
column1_name: "Description of the first column",
column2_name: "Description of the second column",
column3_name: "Description of the third column",
record_name: {
description: "Description of the record.",
columns: {
record_column1_name: "Description of the first record column",
record_column2_name: "Description of the second record column",
}
}
}
}
SELECT
"first_column_value" AS column_1_name,
"second_column_value" AS column_2_name,
"third_column_value" AS column_3_name,
STRUCT("first" AS record_column1_name,
"second" AS record_column2_name) AS record_name
include로 열 문서 재사용
JavaScript include를 통해 SQL 워크플로에서 Dataform의 열 설명을 재사용할 수 있습니다. SQL 워크플로에 이름과 설명이 동일한 열이 여러 개 있는 경우 열 문서를 재사용하는 것이 좋습니다.
- 재사용 가능한 열 설명을 만들려면 열 이름과 설명으로 JavaScript include 상수를 정의합니다.
단일 열의 설명으로 상수를 정의하거나 집합 또는 열 설명으로 상수를 정의하여 테이블의 모든 열 설명을 재사용할 수 있습니다. Dataform에서 include 만들기 및 사용에 대한 자세한 내용은 include를 사용하여 단일 저장소에서 코드 재사용을 참고하세요.
다음 코드 샘플은 includes/docs.js
JavaScript 파일에 정의된 개별 열에 대한 설명이 있는 여러 상수를 보여줍니다.
// filename is includes/docs.js
const user_id = `A unique identifier for a user`;
const age = `The age of a user`;
const creation_date = `The date this user signed up`;
const user_tenure = `The number of years since the user's creation date`;
const badge_count = `The all-time number of badges the user has received`;
const questions_and_answer_count = `The all-time number of questions and answers the user has created`;
const question_count = `The all-time number of questions the user has created`;
const answer_count = `The all-time number of answers the user has created`;
const last_badge_received_at = `The time the user received their most recent badge`;
const last_posted_at = `The time the user last posted a question or answer`;
const last_question_posted_at = `The time the user last posted an answer`;
const last_answer_posted_at = `The time the user last posted a question`;
module.exports = {
user_id,
age,
creation_date,
user_tenure,
badge_count,
questions_and_answer_count,
question_count,
answer_count,
last_badge_received_at,
last_posted_at,
last_question_posted_at,
last_answer_posted_at,
};
다음 코드 샘플은 테이블에서 선택한 열에 대한 문서를 생성하기 위해 definitions/my_table.sqlx
SQLX 테이블 정의 파일에서 사용되는 includes/docs.js
에 정의된 user_id
및 age
상수를 보여줍니다.
config {
type: "table",
description: "Table description.",
columns: {
user_id: docs.user_id,
column2_name: "Description of the second column",
column3_name: "Description of the third column",
age: docs.age,
}
}
SELECT ...
다음 코드 샘플은 includes/docs.js
JavaScript 파일에 정의된 열 설명 집합이 있는 상수를 보여줍니다.
// filename is includes/docs.js
const columns = {
user_id = `A unique identifier for a user`,
age = `The age of a user`,
creation_date = `The date this user signed up`,
user_tenure = `The number of years since the user's creation date`,
badge_count = `The all-time number of badges the user has received`,
questions_and_answer_count = `The all-time number of questions and answers the user has created`,
question_count = `The all-time number of questions the user has created`,
answer_count = `The all-time number of answers the user has created`,
last_badge_received_at = `The time the user received their most recent badge`,
last_posted_at = `The time the user last posted a question or answer`,
last_question_posted_at = `The time the user last posted an answer`,
last_answer_posted_at = `The time the user last posted a question`,
}
module.exports = {
columns
};
다음 코드 샘플은 includes/table_docs.js
에 정의되어 있고 definitions/my_table.sqlx
SQLX 테이블 정의 파일에서 테이블의 모든 열에 대한 문서를 생성하는 데 사용되는 columns
상수를 보여줍니다.
config { type: "table",
description: "My table description",
columns: docs.columns
}
SELECT 1 AS one
다음 단계
- 추가 테이블 설정을 구성하는 방법은 추가 테이블 설정 구성을 참조하세요.
- 어설션으로 테이블 데이터를 테스트하는 방법은 어설션으로 테이블 테스트를 참조하세요.
- JavaScript로 테이블을 정의하는 방법을 알아보려면 JavaScript로 Dataform 워크플로 만들기를 참고하세요.
- include를 사용하여 코드를 재사용하는 방법은 include를 사용하여 단일 저장소에서 코드 재사용을 참고하세요.
- Dataform 명령줄 인터페이스 사용 방법을 알아보려면 Dataform CLI 사용을 참고하세요.