【问题标题】:Using Dataprep to write to just a date partition in a date partitioned table使用 Dataprep 仅写入日期分区表中的日期分区
【发布时间】:2018-08-23 15:54:49
【问题描述】:

我正在使用 BigQuery 视图从 BigQuery 表中获取昨天的数据,然后尝试使用 Dataprep 写入日期分区表。

我的第一个问题是 Dataprep 无法正确提取 DATE 类型的列,但将它们转换为 TIMESTAMP 可以(感谢 Elliot)。

但是,在使用 Dataprep 并设置输出 BigQuery 表时,您只有 3 个选项:AppendTruncateDrop 现有表。如果表是日期分区的并且您使用Truncate,它将删除所有现有数据,而不仅仅是该分区中的数据。

还有其他我应该使用的方法吗?我的替代方法是使用 Dataprep 覆盖表,然后使用 Cloud Composer 运行一些 SQL 将这些数据推送到日期分区表中。理想情况下,我想只使用 Dataprep 来做到这一点,但现在这似乎不可能。

BigQuery 表架构:

分区详情:

我正在摄取的数据很简单。在一个流程中:

+------------+--------+
|    date    |  name  |
+------------+--------+
| 2018-08-08 | Josh1  |
| 2018-08-08 | Josh2  |
+------------+--------+

在另一个流程中:

+------------+--------+
|    date    |  name  |
+------------+--------+
| 2018-08-09 | Josh1  |
| 2018-08-09 | Josh2  |
+------------|--------+

在这两种情况下都会覆盖数据。

【问题讨论】:

  • BigQuery Data Type Conversions,您可以使用Dataprep 的“日期时间(时间戳)”类型写入BigQuery 表中的TIMESTAMP,对吗?不过,我认为没有办法使用DATE
  • 感谢@ElliottBrossard 提供的信息。我已经设法使用TIMESTAMP 让它工作,但又出现了另一个问题。编辑了问题。某处是否有功能请求线程?
  • 您可以向Cloud Dataprep issue tanker提交功能请求。
  • 我也有同样的问题!你在 DataPrep 中做到了吗?
  • 嗨华章:无法选择分区。目标表文本框不可编辑,您必须从 GUI 中选择它。理想情况下,我想安排这个数据准备作业,以便它导入最新日期的数据而不是硬编码分区。我相信这可能是 Dataprep 的错误用例。 @MT467,我最终只是用 SQL 编写查询并使用 Composer 进行调度

标签: google-cloud-platform google-bigquery google-cloud-dataprep


【解决方案1】:

您可以创建一个分区的table bases on DATE。写入分区表的数据会自动传送到相应的分区。

写入分区表的数据会根据分区列中的日期值(以 UTC 表示)自动传送到适当的分区。

追加数据以将新数据添加到分区中。

您可以使用 bq 命令创建表:

bq mk --table --expiration [INTEGER1] --schema [SCHEMA] --time_partitioning_field date 

time_partitioning_field 定义了您将用于分区的字段。

【讨论】:

  • 如何使用 Dataprep 写入该分区?
  • 写入分区表的数据会自动传送到相应的分区
  • 您只需将数据发送到分区表,而无需“指定”分区。
  • 有没有办法用 Dataprep 截断那个分区?据我所知,您只能截断整个表,而不仅仅是那个特定的分区
  • 我明白了,你想一天多次覆盖一个分区中的数据,如果我错了,请纠正我。如果是这种情况,您可以将数据加载到临时表中,您可以使用分区装饰器将数据加载到 WRITE_TRUNCATE cloud.google.com/bigquery/docs/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多