Google云功能:使用非标准键将GCS JSON文件加载到BigQuery中
我有一个Google云存储桶,其中一个遗留系统会丢弃需要加载到BigQuery中的新行分隔的JSON文件 我编写了一个GoogleCloud函数,它获取JSON文件并将其加载到BigQuery。该函数适用于示例JSON文件-问题是遗留系统正在使用非标准密钥生成JSON:Google云功能:使用非标准键将GCS JSON文件加载到BigQuery中,json,google-bigquery,google-cloud-storage,google-cloud-functions,google-api-client,Json,Google Bigquery,Google Cloud Storage,Google Cloud Functions,Google Api Client,我有一个Google云存储桶,其中一个遗留系统会丢弃需要加载到BigQuery中的新行分隔的JSON文件 我编写了一个GoogleCloud函数,它获取JSON文件并将其加载到BigQuery。该函数适用于示例JSON文件-问题是遗留系统正在使用非标准密钥生成JSON: { "id": 12345, "@address": "XXXXXX" ... } 当然“@address”键会抛出所有内容,云函数也会出错 是否有任何选项可以“忽略”具有非标准键的JSON字段?或者提供映射并忽略
{
"id": 12345,
"@address": "XXXXXX"
...
}
当然“@address”键会抛出所有内容,云函数也会出错
是否有任何选项可以“忽略”具有非标准键的JSON字段?或者提供映射并忽略映射中不存在的任何JSON字段?我环顾四周,看看是否可以停用autodetect并提供我自己的映射,但在线文档没有涵盖这种情况
我正在考虑以下选择:
- 将内存中的文件加载到字符串变量中
- 将@address替换为address
- 将分隔的json新行转换为字典列表
- 使用bigquery stream insert在BQ中插入行
谢谢!我假设您得到的错误如下: 错误:查询:无效的字段名“@address”。字段必须包含 只有字母、数字和下划线以字母或字母开头 下划线,最大长度为128个字符 这是BigQuery端的一条错误消息,因为BigQuery中的cols/字段有命名限制。因此,您必须在将文件加载到BigQuery之前清理这些文件 下面是一种完全无服务器的方法:
ParDo
,并使用JSON解析库(例如,如果使用Java,则使用Jackson),读取对象并在创建输出TableRow
对象之前去掉“@”File > GCS > Cloud Function > Dataflow (template) > BigQuery
这样做的好处是:
披露:最后一个链接是我的一位同事写的博客。你到底遇到了什么错误?与其直接从云函数启动加载作业,不如让云函数启动数据流管道(模板)作为谨慎的做法让它加载。嘿@GrahamPolley抱歉,是的,错误就是你在回答中提到的错误。让我读一下答案,然后再给你回复-谢谢!谢谢Graham-我正在按照建议构建管道,尽管我正在用Python编写数据流,并且模板化作业有问题:你知道Python的DF吗?