本文說明 Dataform Core 的方法、屬性和設定選項。您可以在 SQLX 和 JavaScript 檔案中使用 Dataform Core。
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
|
|
資料表、檢視畫面和具體化檢視畫面選項的鍵/值組合。
部分選項 (例如
字串值必須以雙引號括住,例如:
如果選項名稱含有特殊字元,請將名稱放在引號內,例如: |
|
clusterBy
|
string[]
|
用來叢集分區的鍵。 | |
labels
|
|
BigQuery 標籤的鍵/值組合。
如果標籤名稱含有特殊字元 (例如連字號),請加上引號,例如 |
|
partitionBy
|
string
|
用來分割資料表的索引鍵。通常是時間戳記或日期資料欄的名稱。 | |
partitionExpirationDays
|
number
|
BigQuery 在每個分區中儲存資料的天數。這項設定會套用至資料表中的所有分區,但系統會根據分區時間,分別計算每個分區的費用。 | |
requirePartitionFilter
|
boolean
|
宣告分區資料表是否需要 WHERE 子句述詞篩選器,以篩選分區資料欄。 |
|
updatePartitionFilter
|
string
|
以 SQL 為基礎的篩選器,用於套用增量更新時。 |
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
|
(選用步驟) 應加到所有資料表名稱的前置字串。 | |
warehouse
|
string
|
這是必要旗標,必須設為 bigquery 。
|
您可以在存放區層級設定工作流程設定中的 IProjectConfig
屬性。
您可以覆寫個別表格的 defaultSchema
和 defaultDatabase
屬性。
您可以在 SQLX 或 JavaScript 檔案的 SQL SELECT
陳述式中存取所有 IProjectConfig
屬性。
下列程式碼範例顯示在 工作流程設定中,使用 projectConfig.vars
屬性設定的 myVariableName
自訂編譯變數,並在 SQLX 檔案的 SELECT
陳述式中存取:
config { type: "view" }
SELECT ${when(
dataform.projectConfig.vars.myVariableName === "myVariableValue",
"myVariableName is set to myVariableValue!",
"myVariableName is not set to myVariableValue!"
)}
如要進一步瞭解如何為個別編譯結果覆寫專案設定,請參閱 Dataform API 中的 projects.locations.repositories.compilationResults#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 檢查查詢後執行的動作,判斷是否新增或移除資料欄。 這項功能為預先發布版。 |
|
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
子句。
詳情請參閱「設定遞增資料表」。