google-bigquery - BigQuery:数组带有 WriteToBigQuery 的字段
问题描述
我正在用 Python 创建一个 Google Dataflow 模板:
query = "#standardSQL" + """
SELECT
Frame.Serial,
Frame.Fecha,
Frame.Longitud,
Frame.Latitud,
ARRAY_AGG (CONCAT (ID, '-', Valor) ORDER BY ID) AS Resumen
FROM <...>
TABLE_SCHEMA = 'Serial:STRING,Fecha:DATETIME,Longitud:STRING,Latitud:STRING,Resumen:STRING'
| 'Read from BQ' >> beam.io.Read(beam.io.BigQuerySource(query=query,dataset="xxx",use_standard_sql=True))
| 'Write transform to BigQuery' >> WriteToBigQuery('table',TABLE_SCHEMA)
问题
由于 Resumen 字段是一个数组,因此失败:
为非重复字段指定的数组。
我测试的
使用以下语句直接在 BigQuery UI 中创建表:
CREATE TABLE test (Resumen ARRAY<STRING>)
这行得通。该表是通过以下方式创建的:
- 类型:
string
- 模式:
Repeated
- 类型:
更改 TABLE_SCHEMA 并运行管道:
TABLE_SCHEMA ='Serial:STRING,Fecha:DATETIME,Longitud:STRING,Latitud:STRING,Resumen:ARRAY<STRING>'
出现错误:
"Invalid value for: ARRAY\u003cSTRING\u003e is not a valid value".
应该如何TABLE_SCHEMA
创建表并使用 with beam.io.WriteToBigQuery()
?
解决方案
如果您在单个字符串中指定 BQ 架构,则看起来不支持重复或嵌套字段:https ://beam.apache.org/documentation/io/built-in/google-bigquery/#creating-a-table-schema
您需要明确描述您的架构并将字段模式设置为repeated
:https ://github.com/apache/beam/blob/master/sdks/python/apache_beam/examples/cookbook/bigquery_schema.py#L95
# A repeated field.
children_schema = bigquery.TableFieldSchema()
children_schema.name = 'children'
children_schema.type = 'string'
children_schema.mode = 'repeated'
table_schema.fields.append(children_schema)
推荐阅读
- php - Homestead vagrant up 解析错误
- google-classroom - 新模块和单元会成为 Google Classroom API 的一部分吗?
- javascript - 我如何创建一个可以提供 v-model 属性的自定义组件
- php - MySQL REST API 服务器上的连接太多(PHP Yii2)
- ruby-on-rails - 如何在 ruby on rails 上运行服务器?
- opencv - 使用最近的邻域与 cuda 调整图像大小
- php - Wordpress:为没有访问 wp-admin 的用户登录
- scala - com.couchbase.client.java.error.InvalidPasswordException:存储桶“beer-sample”的密码不匹配
- python - 用powershell替换字符串后Python脚本不运行
- android - 如何从android studio中的设备文件资源管理器查看sqlite数据库而不将其保存到系统