【发布时间】:2018-06-21 13:44:07
【问题描述】:
我有一个 Google Cloud Storage 存储桶,其中的旧系统会丢弃需要加载到 BigQuery 中的 NEW_LINE_DELIMITED_JSON 文件。
我编写了一个谷歌云函数,它接收 JSON 文件并将其加载到 BigQuery。该函数适用于示例 JSON 文件 - 问题是遗留系统正在使用非标准密钥生成 JSON:
{
"id": 12345,
"@address": "XXXXXX"
...
}
当然,“@address”键会抛出所有问题,并且云功能会出错......
是否有任何选项可以“忽略”具有非标准键的 JSON 字段?或者提供一个映射并忽略任何不在映射中的 JSON 字段?我环顾四周,看看是否可以停用自动检测并提供我自己的映射,但在线文档并未涵盖这种情况。
我正在考虑以下选项:
- 将内存中的文件加载到字符串var中
- 用地址替换@address
- 将 json 换行符转换为字典列表
- 使用 bigquery 流插入在 BQ 中插入行
但是恐怕这会花费更长的时间,文件大小可能会超过函数的最大 2Gb,在变量中加载文件时处理 unicode 等等等等等等。
我还有什么其他选择?
不,我不能修改旧系统来重命名“@address”字段:(
谢谢!
【问题讨论】:
-
您遇到的具体错误是什么?与其直接从 Cloud Function 启动加载作业,不如让 Cloud Functions 启动 Dataflow 管道(模板)并让它执行加载。
-
嘿@GrahamPolley 抱歉,是的,错误是您在答案中提到的错误。让我读一下答案,我会尽快回复您 - 谢谢!
标签: json google-bigquery google-cloud-storage google-cloud-functions google-api-client