Cloud Storage 转移作业中的运行时参数
在 Cloud Storage、Azure Blob Storage 或 Amazon Simple Storage Service (Amazon S3) 中设置数据转移作业时,您可以将 URI(或数据路径)和目标表参数化。参数化允许您从按日期整理的存储桶加载数据。这些参数称为运行时参数,以便与查询参数区分开来。
如果您在转移作业中使用运行时参数,则可以执行以下操作:
- 指定您要对目标表进行分区的方式
- 检索与特定日期匹配的文件
可用的运行时参数
设置 Cloud Storage、Blob Storage 或 Amazon S3 转移作业时,您可以使用运行时参数指定如何对目标表进行分区。
| 参数 | 模板类型 | 值 | 
|---|---|---|
| run_time | 带格式的时间戳 | 采用世界协调时间 (UTC),基于计划。对于定期运行的计划转移作业, run_time表示预期执行时间。例如,如果转移作业设置为“每 24 小时”执行一次,则连续两次查询之间的run_time差值将正好为 24 小时,即使实际的执行时间可能略有不同也是如此。请参阅 TransferRun.runTime | 
| run_date | 日期字符串 | run_time参数的日期格式为%Y%m%d,例如“20180101”。此格式与提取时间分区表兼容。 | 
模板系统
Cloud Storage、Blob Storage 和 Amazon S3 转移作业支持使用模板语法在目标表名称中采用运行时参数。
参数模板语法
模板语法支持基本的字符串模板和时间偏移量设置。您可以采用以下格式来引用参数:
- {run_date}
- {run_time[+\-offset]|"time_format"}
| 参数 | 用途 | 
|---|---|
| run_date | 此参数将替换成格式为 YYYYMMDD的日期。 | 
| run_time | 此参数支持以下属性: 
      
 | 
- run_time、offset 和 time_format 之间不允许有空格。
- 如需在字符串中包含文本大括号,您可以将其转义为 '\{' and '\}'。
- 如需在 time_format 中包含文本引号或竖线(例如 "YYYY|MM|DD"),您可以在格式字符串中将其转义为'\"'或'\|'。
参数模板示例
以下示例演示了如何使用不同的时间格式指定目标表名称,以及如何设置运行时间的偏移量。| run_time (UTC) | 模板化参数 | 输出目标表名称 | 
|---|---|---|
| 2018-02-15 00:00:00 | mytable | mytable | 
| 2018-02-15 00:00:00 | mytable_{run_time|"%Y%m%d"} | mytable_20180215 | 
| 2018-02-15 00:00:00 | mytable_{run_time+25h|"%Y%m%d"} | mytable_20180216 | 
| 2018-02-15 00:00:00 | mytable_{run_time-1h|"%Y%m%d"} | mytable_20180214 | 
| 2018-02-15 00:00:00 | mytable_{run_time+1.5h|"%Y%m%d%H"}或 mytable_{run_time+90m|"%Y%m%d%H"} | mytable_2018021501 | 
| 2018-02-15 00:00:00 | {run_time+97s|"%Y%m%d"}_mytable_{run_time+97s|"%H%M%S"} | 20180215_mytable_000137 | 
分区选项
BigQuery 中有两种类型的分区表:
- 按提取时间分区的表。对于 Cloud Storage、Blob Storage 和 Amazon S3 转移作业,提取时间就是转移作业的运行时间。
- 根据列分区的表。列类型必须是 TIMESTAMP或DATE列。
如果目标表是基于某一列进行分区的,则在创建目标表并指定其架构时,您应确定分区列。如需详细了解如何创建基于列的分区表,请参阅创建和使用分区表。
分区示例
- 没有分区的表
    - 目标表:mytable
 
- 目标表:
- 注入时间分区表
    - 目标表:mytable$YYYYMMDD
- 请注意,无法指定分钟数。
 
- 目标表:
- 列分区表
    - 目标表:mytable
- 在创建表的架构时,将分区列指定为 TIMESTAMP或DATE列。
 
- 目标表:
有关参数用法的注意事项
- 如果您根据自己的本地时区对数据进行分区,则需要使用模板语法中的偏移机制手动计算相对于世界协调时间 (UTC) 的小时偏移量。
- 无法在参数中指定分钟数。
- 系统允许将 URI 或数据路径的通配符与目标表名称中的参数搭配使用。
运行时参数示例
以下示例展示了将通配符和参数搭配用于常见用例的方法。对于所有示例,假设表的名称为 mytable,run_time 为 2018-02-15 00:00:00(世界协调时间 (UTC))。
将数据转移到非分区表
此用例适用于将新文件从 Cloud Storage、Blob Storage 或 Amazon S3 存储桶加载到非分区表中。此示例在 URI 或数据路径中使用通配符,并使用临时刷新转移作业来选取新文件。
| 数据源 | 来源 URI 或数据路径 | 目标表名称 | 
|---|---|---|
| Cloud Storage | gs://bucket/*.csv | mytable | 
| Amazon S3 | s3://bucket/*.csv | mytable | 
| Blob 存储 | *.csv | mytable | 
将包含所有数据的快照加载到注入时间分区表中
在此示例中,指定的 URI 或数据路径中的所有数据都将转移到一个按当天日期分区的表中。在一项刷新转移作业中,此配置会选取自从上次加载后添加的文件,并将其添加到某个特定的分区中。
| 数据源 | 来源 URI 或数据路径 | 参数化的目标表名称 | 计算的目标表名称 | 
|---|---|---|---|
| Cloud Storage | gs://bucket/*.csv | mytable${run_time|"%Y%m%d"} | mytable$20180215 | 
| Amazon S3 | s3://bucket/*.csv | mytable${run_time|"%Y%m%d"} | mytable$20180215 | 
| Blob 存储 | *.csv | mytable${run_time|"%Y%m%d"} | mytable$20180215 | 
此用例将当天的数据转移到按当天日期分区的表中。此示例还适用于刷新转移作业,该作业检索与某一日期相匹配的新增文件,并将数据加载到相应的分区中。
| 数据源 | 参数化 URI 或数据路径 | 参数化的目标表名称 | 评估的 URI 或数据路径 | 计算的目标表名称 | 
|---|---|---|---|---|
| Cloud Storage | gs://bucket/events-{run_time|"%Y%m%d"}/*.csv | mytable${run_time|"%Y%m%d"} | gs://bucket/events-20180215/*.csv | mytable$20180215 | 
| Amazon S3 | s3://bucket/events-{run_time|"%Y%m%d"}/*.csv | mytable${run_time|"%Y%m%d"} | s3://bucket/events-20180215/*.csv | mytable$20180215 | 
| Blob 存储 | events-{run_time|"%Y%m%d"}/*.csv | mytable${run_time|"%Y%m%d"} | events-20180215/*.csv | mytable$20180215 |