当前位置: 首页 > 知识库问答 >
问题:

BigQuery:带有WriteToBigQuery的数组字段

凌波峻
2023-03-14

我正在用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)

此“到期恢复失败”字段为数组:

为非重复字段指定的数组

>

  • 直接在BigQuery UI中创建表,并使用以下语句:

    创建表测试(Resumen Array )

    这管用。创建该表时使用:

    • 类型:字符串
    • 模式:重复

    更改TABLE_SCHEMA并运行管道:

    table_schema=“serial:string,fecha:datetime,unidorud:string,latitud:string,resumen:array

    错误为:

    "Invalid value for: ARRAY\u003cSTRING\u003e is not a valid value".
    

    table_schema应该如何创建表并与beam.io.WriteTobigQuery()一起使用?

  • 共有1个答案

    邓崇凛
    2023-03-14

    如果在单个字符串中指定BQ模式,则似乎不支持重复或嵌套字段:https://beam.apache.org/documentation/io/build-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)
    
     类似资料:
    • 问题内容: 我想出了一些可行的方法,但并非完全符合我的期望。这是我的解决方案: attribute_category_map是一个具有两列的表,我在其中查找第1列中的对应值,并用第2列中的值替换目标表中的数据。我实现的最佳结果- 用相同的值更新了一行中的所有嵌套字段,这仅适用于第一个嵌套字段,而不是使用特定值更新每个嵌套字段。 主表的简化架构: 会话行中通常有多个匹配项,一个匹配项中通常包含多个产

    • 我想知道是否有方法将与字节数组参数一起使用。 请找到以下文档的链接: http://docs.oracle.com/javase/1.7/docs/api/javax/crypto/spec/pbekeyspec.html)

    • 问题内容: 我使用Vlad Mihalcea的库来将SQL数组(在我的情况下为Postgresql)映射到JPA。然后,假设我有一个实体,例如。 适当的SQL是: 使用QueryDSL,我想获取包含所有给定标签的行。原始SQL可能是: (摘自:https : //www.postgresql.org/docs/9.1/static/functions- array.html ) 可以用QueryD

    • 问题内容: 我有一个简单的网址数组,我想用jQuery加载每个网址。我正在使用,但是似乎无法使用它,所以我切换到了-我几乎可以使用它了,但是我得到的结果很奇怪。我希望有人可以帮助我改善这项工作。 这应该输出.. 步骤1.0 步骤1.1 步骤1.2 第2步 然后数组包含所有3个Ajax请求的结果。这可能吗? 问题答案: 首先,您必须决定是要并行处理三个ajax调用(同时运行所有ajax调用,而总运行

    • 问题内容: 我有以下两个文件: 和: 我想基于两个字段执行聚合:casting.name和casting.category。 我尝试使用基于Cast.name字段的termsaggregation和子聚合,这是另一个基于casting.category字段的termsaggregation。 问题在于,对于“ Chris Evans”条目,ElasticSearch为所有类别(演员,生产者)设置了