本文档介绍了 Dataform 核心的方法、属性和配置选项。您可以在 SQLX 和 JavaScript 文件中使用 Dataform 核心。
assert()
assert
    | 
   (name: string, query?: AContextable
    | 
  
| 
    向已编译的图添加 Dataform 断言。 仅在   | 
  
示例:
// definitions/file.js
assert("name").query(ctx => "select 1");
CommonContext
在评估可设置上下文的 SQL 代码(例如在 SQLX 文件中)时,或者在使用带有 Dataform 核心的 Contextable 实参时,可以使用上下文方法。
database
    | 
   () => string
    | 
  
| 返回相应数据集的数据库(如果适用)。 | |
name
    | 
   () => string
    | 
  
| 返回相应表的名称。 | |
ref
    | 
   (ref: Resolvable | string[], rest: string[]) => string
    | 
  
引用另一个操作,将其作为依赖项添加到此操作,返回有效的 SQL 以在 from 表达式中使用。
此函数可使用  
您也可以使用  ${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 属性。
以下代码示例展示了在 workflow settings 中设置的 myVariableName 自定义编译变量(带有 projectConfig.vars 属性),该变量在 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 政策标记的完整标识符。BigQuery 政策标记的完整标识符包括项目名称、位置和分类,
 
例如:  | 
  |
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 文件中)时,或者在将 Contextable 实参与 Dataform 核心搭配使用时,可以使用上下文方法。
incremental
    | 
   () => boolean
    | 
  
| 当当前上下文表明表将以增量方式构建时,返回 true。 | |
name
    | 
   () => string
    | 
  
| 返回此表的完全限定名称。 | |
ref
    | 
   (ref: Resolvable | string[], rest: string[]) => string
    | 
  
| 引用另一个操作,将其作为依赖项添加到此操作,返回可在 FROM 表达式中使用的有效 SQL。
 
可以使用  ${ref({ name: "name", schema: "schema", database: "database" })}
您也可以使用  
如果仅提供两个值,系统会使用默认数据库,并将这两个值解读为  如果仅提供一个值,则使用默认数据库架构,并将提供的值解读为“名称”。 ${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 子句。如需了解详情,请参阅配置增量表。