google-bigquery - 分区 BigQuery 表,从 AVRO 加载
问题描述
我有一个 bigquery 表,其数据是从 GCS 上的 AVRO 文件加载的。这不是外部表。
每个 AVRO 对象中的一个字段是created
(带有long
类型的日期),我想使用该字段对表进行分区。
做这个的最好方式是什么?
谢谢
解决方案
阻止created
用作分区列的两个问题:
avro 文件在加载期间定义模式。在这一步只有一个分区选项:选择 Partition By Ingestion Time,但是,很可能会为此目的包含另一个字段。
创建的字段很长。该值似乎包含一个日期时间。如果它是 Integer,您将能够以某种方式使用 Integer Range 分区表。但在这种情况下,您需要将 long 值转换为 Date/Timestamp 以使用date/timestamp partitioned tables。
所以,在我看来,你可以尝试:
- 将数据按原样导入到第一个表中。
- 创建第二个按
created
TIMESTAMP 类型分区的空表。 - 执行从第一个表读取的查询并在TIMESTAMP_SECONDS
created
(或 TIMESTAMP_MILLIS)上应用时间戳函数以将值转换为 TIMESTAMP,因此您插入的每个值都将被分区。
推荐阅读
- python - 在使用 beautifulsoup 进行网络抓取时,我无法使用 soup.findAll() 找到相关数据
- algorithm - 用于比较事物并确定它们有多相似的算法和数据结构?
- r - R - 使用 geom_ribbon 以不同颜色为线条下方/上方的区域着色
- mysql - 尝试修复 mysql 安装后收到 Linux“错误:BrokenCount > 0”?
- fortran - 使用 GCC 运行的覆盖率不会产生数据
- java - 线程“主”java.lang.NoSuchMethodError 中的异常:'javax.persistence.Index[] javax.persistence.Table.indexes()'
- ios - 从标签栏关闭时导航栏中的搜索控制器出现问题
- java - 比较JAVA中字符串内的数值
- azure-devops-rest-api - 从 azure devops 工件下载数据
- c# - 使用 C# 将签名附加到 PDF