google-bigquery - 使用带有自动模式检索的 LoadJobs 时如何处理 Avro 到 BigQuery 的类型转换
问题描述
我们在 Avro 中定义了一个公司范围的共享模型,并希望使用LoadJobs
自动模式检索将此模型数据加载到 BigQuery 中,然后能够将数据导出(到 Google Cloud Storage 或其他地方)并使用相同的方法反序列化/读取它Avro 模型。
这种方法的问题是导出的 Avro 模式与加载的模式不同,因此使用与加载相同的模式进行反序列化会失败。
我们看到以下不兼容的类型转换:
模型架构(加载时使用) | 派生的 BigQuery 类型 | 架构(导出后) |
---|---|---|
int |
INTEGER |
long |
float |
FLOAT |
double |
time-millis |
TIME |
time-micros |
timestamp-millis |
TIMESTAMP |
timestamp-micros |
map |
REPEATED RECORD |
array |
Fmpov 我只看到以下解决这个问题的方法:
- 预先创建表+模式而不是使用自动检索
- 加载到 BigQuery 和/或从 BigQuery 导出时使用适配器
- 更改 Avro 架构以使用与 BigQuery“兼容”(在加载和导出之间未更改)的类型
还有什么想法吗?
解决方案
当您将一些数据从 BigQuery 导出为 Avro 格式时,它将创建一个方案,而无法定义自定义方案。您可以在此处根据 BigQuery 方案检查目标 Avro 字段类型。
您关于预先创建表而不是使用自动检索的第一个想法似乎不是一个有用的解决方法,因为在您的情况下,导出它们时没有与您的 Avro 架构匹配的 BigQuery 类型。
在您的情况下,使用适配器似乎是最佳选择,也许直接将BigQuery 中的日期和日期时间导出为毫秒可以让您的生活更轻松。此外,根据您在 BigQuery 上所做的事情,您还可以考虑在将数据导入 BigQuery 时不要使用 Avro 逻辑类型,但是还有一种方法可以使适配器实现更容易,而不是避免使用的解决方案其中。
推荐阅读
- python - PyMySQL 参数化查询如何在内部工作,是否安全?
- python - Python OpenCV检测轮廓形状顶点的宽度和高度
- react-native - 如何在本机反应中获取文本框输入并将其提供给 axios 我想从输入中获取数据并将其提供给 Axios 中的电子邮件和密码
- python - 使用 python 的 MS Word 自动化
- opencv - 如何在 python 或 javascript 上使用 opencv 更改车身颜色
- python - 激活 MFA 后,有没有办法通过终端获取 MS 图形 API 访问令牌?
- node.js - 如何阻止 Next.js api 覆盖我的 ETag 标头
- java - 我应该用什么类型调用 ResponseEntity?
- sql-server - 我们可以在 PowerBI 导入查询中使用 SQL Server 索引吗
- python - 如何在标签中编辑一些txt?