本文說明 Dataform 核心的方法、屬性和設定選項。您可以在 SQLX 和 JavaScript 檔案中使用 Dataform 核心。
assert()
assert
|
(name: string, query?: AContextable
|
|
將 Dataform 斷言新增至已編譯圖表。 僅適用於 |
範例:
// definitions/file.js
assert("name").query(ctx => "select 1");
CommonContext
評估可設定環境的 SQL 程式碼時 (例如在 SQLX 檔案中),或使用 Dataform Core 的 Contextable 引數時,即可使用環境方法。
database
|
() => string
|
| 傳回這個資料集的資料庫 (如適用)。 | |
name
|
() => string
|
| 傳回這個資料表的名稱。 | |
ref
|
(ref: Resolvable | string[], rest: string[]) => string
|
參照另一個動作,將其新增為這個動作的依附元件,並傳回可在 from 運算式中使用的有效 SQL。
這個函式可以使用
您也可以使用 ${ref("database", "schema", "name")}
${ref("schema", "name")}
${ref("name")}
|
|
resolve
|
(ref: Resolvable | string[], rest: string[]) => string
|
與 ref 類似,但不會將參照的動作新增為這個動作的依附元件。 |
|
self
|
() => string
|
等同於 resolve(name())。
傳回有效的 SQL 字串,可用於參照這個動作產生的資料表。 |
|
schema
|
() => string
|
| 傳回這個資料集的結構定義。 |
Contextable
可提供內容的引數可以傳遞一般型別 T 的純值,也可以傳遞函式,並使用這類作業的內容物件呼叫函式。
T | (ctx: Context) => T
Dataform
包含 IProjectConfig 物件的全域變數。取得 IProjectConfig 屬性時必須提供,例如:
dataform.projectConfig.vars.myVariableName === "myVariableValue"
declare()
declare
|
(dataset: dataform.ITarget)
|
|
將資料集宣告為 Dataform 資料來源。 僅適用於 |
範例:
// definitions/file.js
declare({name: "a-declaration"})
defaultLocation
defaultLocation 屬性會指定預設的 BigQuery 資料集位置。Dataform 會使用這個位置處理程式碼並儲存結果。這個處理位置必須與 BigQuery 資料集的位置相符。不過,這項設定不必與 Dataform 存放區位置相符。
如未設定 defaultLocation 屬性,Dataform 會根據 SQL 查詢參照的資料集決定位置。運作方式如下:
- 如果查詢參照相同位置的資料集,Dataform 會使用該位置。
- 如果查詢參照兩個以上不同位置的資料集,就會發生錯誤。如要進一步瞭解這項限制,請參閱「跨區域資料集複製」。
- 如果查詢未參照任何資料集,Dataform 的預設位置為
US多區域。如要選擇其他位置,請設定defaultLocation屬性。或者,您也可以在查詢中使用@@location系統變數。
詳情請參閱「指定位置」。
IActionConfig
定義套用至工作流程動作的 Dataform 標記和依附元件。
tags
|
string[]
|
|
請列出要套用到動作的使用者定義標記。 |
|
dependencies
|
Resolvable| Resolvable[]
|
|
動作的依附元件。 |
|
disabled
|
boolean
|
|
如果設為 True,系統就不會執行這項動作。不過,仍可依賴這項動作。適合用來暫時關閉失效的動作。 |
IAssertionConfig
assertion 動作類型的設定選項。
database
|
string
|
| 要為這項斷言建立對應檢視表的資料庫 (Google Cloud 專案 ID)。 | |
description
|
string
|
| 這項斷言的說明。 | |
disabled
|
boolean
|
如果設為 true,系統就不會執行這項動作。
您仍可依賴這項動作。適合用來暫時關閉失效的動作。 |
|
hermetic
|
boolean
|
| 宣告這個動作是否為密封動作。如果動作的所有依附元件都已明確宣告,則該動作為封閉式。
如果這項動作依附於未宣告為依附元件的來源資料,請將 |
|
schema
|
string
|
| 要為這項斷言建立對應檢視表的結構定義 (BigQuery 資料集)。 | |
tags
|
string[]
|
| 套用至這個動作的使用者定義標記清單。 |
IBigQueryOptions
BigQuery 專屬的倉儲選項。
additionalOptions
|
|
| table、view 和 materialized view 選項的鍵/值組合。
部分選項 (例如
字串值必須以雙引號括住,例如:
如果選項名稱包含特殊字元,請用引號括住名稱,例如: |
|
clusterBy
|
string[]
|
| 用來叢集分割區的索引鍵。 | |
labels
|
|
| BigQuery 標籤的鍵/值組合。
如果標籤名稱包含特殊字元 (例如連字號),請用引號括住名稱,例如 |
|
partitionBy
|
string
|
| 用來分割資料表的鍵。 通常是時間戳記或日期資料欄的名稱。 | |
partitionExpirationDays
|
number
|
| BigQuery 在每個分區中儲存資料的天數。這項設定會套用至資料表中的所有分區,但會根據分區時間,獨立計算每個分區。 | |
requirePartitionFilter
|
boolean
|
宣告分區資料表是否需要 WHERE 子句述詞篩選器,用於篩選分區資料欄。 |
|
updatePartitionFilter
|
string
|
| 套用增量更新時,以 SQL 為基礎的篩選器。 | |
iceberg
|
IIcebergOptions
|
| Iceberg 代管資料表的 Apache Iceberg 專屬選項。 |
IIcebergOptions
Iceberg 代管資料表的 Apache Iceberg 專屬選項。
connection |
string |
|
選用。Cloud Storage 連線的資源名稱,可提供從外部儲存空間讀取及寫入資料的憑證。格式設定方式如下:
預設為 |
|
file_format
|
string
|
|
選用。表格資料的檔案格式。
系統僅支援 |
|
bucket_name
|
string
|
|
必須在資料表或工作流程層級提供。儲存資料表資料的 Cloud Storage bucket 名稱。
您必須在資料表定義檔案的 |
|
table_folder_root
|
string
|
|
選用。Cloud Storage bucket 內第一層資料夾的名稱,用於儲存資料表資料。
如未設定這項屬性,Dataform 會使用 |
|
table_folder_subpath
|
string
|
|
選用。
如未設定這項屬性,Dataform 會使用 |
這些值會建構 Cloud Storage URI,格式如下:
gs://BUCKET_NAME/TABLE_FOLDER_ROOT/TABLE_FOLDER_SUBPATH。
IColumnsDescriptor
說明資料表中的資料欄。
{ [name]: string | IRecordDescriptor }
IDeclarationConfig
declaration 動作類型的設定選項。
columns
|
IColumnsDescriptor
|
| 表格中資料欄的說明。 | |
database
|
string
|
| 來源資料表所在的資料庫 (Google Cloud 專案 ID)。 | |
description
|
string
|
| 資料表說明。 | |
schema
|
string
|
| 來源資料表所在的結構定義 (BigQuery 資料集)。 |
IDependenciesConfig
定義工作流程動作的依附元件。
dependencies
|
Resolvable| Resolvable[]
|
|
這項動作的一或多個明確依附元件。依附元件動作會在依附動作之前執行。通常這會保持未設定狀態,因為大多數依附元件都是在使用 |
|
hermetic
|
boolean
|
|
聲明這個動作是否為密封動作。如果動作的所有依附元件都已明確宣告,則該動作為封閉式。如果這項動作依賴未宣告為依附元件的來源資料,則應將 |
IDocumentableConfig
定義資料集及其資料欄的說明。
columns
|
IColumnsDescriptor
|
|
資料集內資料欄的說明。 |
|
description
|
string
|
|
資料集的說明。 |
INamedConfig
定義工作流程動作的類型和名稱。
type
|
string
|
|
動作類型。 |
|
name
|
string
|
|
動作的名稱。 |
IOperationConfig
operations 動作類型的設定選項。
columns
|
IColumnsDescriptor
|
| 表格中資料欄的說明。 | |
database
|
string
|
| 要建立這項動作輸出內容的資料庫 (Google Cloud 專案 ID)。 | |
description
|
string
|
| 資料表說明。 | |
disabled
|
boolean
|
如果設為 true,系統就不會執行這項動作。
動作仍可依賴。適合用來暫時停用損壞的動作。
|
|
hasOutput
|
boolean
|
宣告這個 operations 動作會建立可使用 ref 函式參照的資料表。
如果設為 create or replace table ${self()} as select ...
|
|
hermetic
|
boolean
|
| 宣告這項動作是否為封閉式。如果動作的所有依附元件都已明確宣告,則該動作為封閉式。
如果這項動作依附於未宣告為依附元件的來源資料,請將 |
|
schema
|
string
|
| 要建立這項動作輸出的結構定義 (BigQuery 資料集)。 | |
tags
|
string[]
|
| 套用至這個動作的使用者定義標記清單。 |
IProjectConfig
包含 Dataform 存放區的編譯設定。
defaultDatabase
|
string
|
| 這是必要旗標,預設資料庫 (Google Cloud 專案 ID)。 | |
defaultSchema
|
string
|
| 這是必要旗標,預設結構定義 (BigQuery 資料集 ID)。 | |
defaultLocation
|
string
|
| 選用。Dataform 建立資料表的預設 BigQuery 位置。 | |
assertionSchema
|
string
|
| 這是必要旗標,斷言的預設結構定義 (BigQuery 資料集 ID)。 | |
vars
|
map (key: string, value: string)
|
選用。編譯期間提供給專案程式碼的使用者定義變數。包含 "key": value 組合清單的物件。例如:{ "name": "wrench", "mass": "1.3kg", "count": "3" }。
|
|
databaseSuffix
|
string
|
| 選用。應附加至所有資料庫 (Google Cloud 專案 ID) 名稱的尾碼。 | |
schemaSuffix
|
string
|
| 選用。應附加至所有結構定義 (BigQuery 資料集 ID) 名稱的後置字串。 | |
tablePrefix
|
string
|
| 選用。應加在所有資料表名稱的前置字串。 | |
defaultIcebergConfig
|
object
|
選用。Apache Iceberg 代管資料表的工作流程層級預設值。
包含下列欄位:
|
|
preserveGovernanceControls
|
boolean
|
選用。如果設為 true,Dataform 會自動在工作流程執行期間,為存放區中的所有資料表保留現有的 BigQuery 資料政策和資料治理標記 (預先發布版)。 |
|
warehouse
|
string
|
這是必要旗標,必須設為 bigquery。
|
您可以在存放區層級的工作流程設定中設定 IProjectConfig 屬性。
您可以覆寫個別表格的 defaultSchema 和 defaultDatabase 屬性。
您可以在 SQLX 或 JavaScript 檔案的 SQL SELECT 陳述式中存取所有 IProjectConfig 屬性。
下列程式碼範例顯示在工作流程設定中設定的 myVariableName 自訂編譯變數,以及在 SQLX 檔案的 SELECT 陳述式中存取的 projectConfig.vars 屬性:
config { type: "view" }
SELECT ${when(
dataform.projectConfig.vars.myVariableName === "myVariableValue",
"myVariableName is set to myVariableValue!",
"myVariableName is not set to myVariableValue!"
)}
如要進一步瞭解如何覆寫個別編譯結果的專案設定,請參閱 Dataform API 中的 CodeCompilationConfig REST 資源。
IRecordDescriptor
說明資料表中具有巢狀資料欄的結構、物件或記錄。
bigqueryPolicyTags
|
string | string[]
|
| 套用至這個資料欄的 BigQuery 政策標記完整 ID。BigQuery 政策標記的完整 ID 包含專案名稱、位置和分類,
例如: |
|
columns
|
IColumnsDescriptor
|
| 結構體、物件或記錄中的資料欄說明。 | |
description
|
string
|
| 結構體、物件或記錄的說明。 |
ITableAssertions
在資料表定義中建立斷言的選項。
nonNull
|
string | string[]
|
永遠無法為 NULL 的資料欄。
如果設定,當任何資料列包含這些資料欄的 |
|
rowConditions
|
string[]
|
| 資料表中所有資料列都應符合的一般條件。 如果設定,當任何資料列違反其中任一條件時,對應的斷言就會失敗。 |
|
uniqueKey
|
string | string[]
|
| 構成資料表不重複鍵索引的資料欄。 如果設定此條件,當資料表有多個資料列在所有這些資料欄中具有相同的值時,產生的判斷就會失敗。 |
|
uniqueKeys
|
[]
|
| 資料欄組合,每個組合都構成資料表的唯一鍵索引。 如果設定這項屬性,且資料表有多個資料列在不重複索引鍵的所有資料欄中具有相同的值,則產生的斷言會失敗。 |
ITableConfig
table 動作的設定選項,包括 table、view 和 incremental 資料表類型。
擴充 IActionConfig、IDependenciesConfig、IDocumentableConfig、INamedConfig 和 ITargetableConfig。
assertions
|
ITableAssertions
|
| 要在資料表上執行的判斷。 如果已設定,系統會自動建立相關的判斷,並以這個表格的依附元件形式執行。 |
|
bigquery
|
IBigQueryOptions
|
| BigQuery 專屬倉儲選項。 | |
columns
|
IColumnsDescriptor
|
| 表格中資料欄的說明。 | |
database
|
string
|
| 要建立這項動作輸出內容的資料庫 (Google Cloud 專案 ID)。 | |
description
|
string
|
| 資料表說明。 | |
disabled
|
boolean
|
如果設為 true,系統就不會執行這項動作。
動作仍可依賴。適合用來暫時停用損壞的動作。
|
|
hermetic
|
boolean
|
| 宣告這項動作是否為封閉式。如果動作明確宣告所有依附元件,該動作就是密封動作。
如果這項動作依附於未宣告為依附元件的來源資料,請將 |
|
materialized
|
boolean
|
只有在資料表類型為 view 時才有效。如果設為 true,系統就會建立具體化檢視區塊。 |
|
onSchemaChange
|
onSchemaChange
|
只有在資料表類型為 incremental 時才有效。
Dataform 檢查 這項功能為預先發布版。 |
|
preserveGovernanceControls
|
boolean
|
選用。如果設為 true,Dataform 會在完整重新整理期間,重新建立資料表、檢視表或漸進式資料表時,備份並重新套用現有的 BigQuery 資料政策和資料治理標記 (預先發布版)。覆寫在 workflow_settings.yaml 中設定的工作流程層級預設值。 |
|
protected
|
boolean
|
僅適用於 incremental 表格類型。
如果設為 true,執行這項動作時會忽略 |
|
schema
|
string
|
| 要建立這項動作輸出內容的結構定義 (BigQuery 資料集)。 | |
tags
|
string[]
|
| 套用至這個動作的使用者定義標記清單。 | |
type
|
TableType
|
| 資料表類型。 | |
uniqueKey
|
string[]
|
| 遞增資料表的合併條件專屬鍵。
如果已設定,系統會更新具有相符不重複鍵的記錄,而不是插入新列。 |
ITableContext
評估可設定環境的 SQL 程式碼時 (例如在 SQLX 檔案中),或使用 Dataform Core 的 Contextable 引數時,即可使用環境方法。
incremental
|
() => boolean
|
| 如果目前情境指出資料表會逐步建立,則傳回 true。 | |
name
|
() => string
|
| 傳回這個資料表的完整名稱。 | |
ref
|
(ref: Resolvable | string[], rest: string[]) => string
|
| 參照另一個動作,將其新增為這個動作的依附元件,並傳回可在 from 運算式中使用的有效 SQL。
呼叫這個函式時,可以傳入 ${ref({ name: "name", schema: "schema", database: "database" })}
您也可以使用
如果只提供兩個值,系統會使用預設資料庫,並將值解讀為 如果只提供一個值,系統會使用預設資料庫結構定義,並將提供的值解讀為「name」。 ${ref("database", "schema", "name")}
${ref("schema", "name")}
${ref("name")}
|
|
resolve
|
(ref: Resolvable | string[], rest: string[]) => string
|
與 ref 類似,但不會新增依附元件,而是解析提供的參照,以便在 SQL 中使用,例如在 `from` 運算式中。 |
|
self
|
() => string
|
等同於 resolve(name())。
傳回有效的 SQL 字串,可用於參照這項動作產生的資料表。 |
|
when
|
(cond: boolean, trueCase: string, falseCase: string) => string
|
if 條件的簡寫。等同於 cond ? trueCase : falseCase。
|
ITarget
BigQuery 中的資料表參照。
database
|
string
|
name
|
string
|
schema
|
string
|
ITargetableConfig
定義工作流程動作的目標資料庫和結構定義。
database
|
string
|
|
要建立這項動作輸出內容的資料庫。必須設為 BigQuery。 |
|
schema
|
string
|
|
建立這項動作輸出內容的結構定義。 |
onSchemaChange
設定 onSchemaChange 屬性後,Dataform 會檢查 SELECT 查詢,判斷是否新增或移除資料欄。接著,Dataform 會執行 onSchemaChange 屬性值指定的動作。您可以將動作設為下列其中一項:
IGNORE(預設):忽略新增的資料欄,並針對缺少的資料欄顯示錯誤。如果未設定onSchemaChange,則這是結構定義變更時的預設行為。FAIL:如果 Dataform 偵測到任何結構定義變更,就會停止動作,有助於維持結構定義一致性。EXTEND:將查詢中的新資料欄新增至累加資料表,並為先前的記錄新增NULL值。如果查詢中的原始結構定義缺少或移除資料欄,就會顯示錯誤。您可以使用這項設定,在執行階段將新資料欄新增至累加資料表。SYNCHRONIZE:將查詢中的新資料欄新增至增量資料表,並為先前的記錄新增NULL值。移除原始結構定義中存在,但目前查詢中缺少的資料欄。
operate()
operate
|
(name: string, queries?: Contextable
|
|
定義 SQL 作業。 僅適用於 |
範例:
// definitions/file.js
operate("an-operation", ["SELECT 1", "SELECT 2"])
publish()
publish
|
(name: string, queryOrConfig?: Contextable
|
|
建立資料表或檢視區塊。 僅適用於 |
範例:
// definitions/file.js
publish("published-table", {
type: "table",
dependencies: ["a-declaration"],
}).query(ctx => "SELECT 1 AS test");
可解決
可解析項目可以是資料表名稱 (string),也可以是描述關係完整路徑的物件。
string | ITarget
TableType
支援的表格動作類型。
系統會將 view 類型的資料表建立為檢視區塊。
table 類型的資料表會建立為資料表。
incremental 類型的資料表必須包含 where 子句。詳情請參閱「設定增量資料表」。