Python 列表到 BigQuery 重复字符串

Posted

技术标签:

【中文标题】Python 列表到 BigQuery 重复字符串【英文标题】:Python list to BigQuery repeated string 【发布时间】:2019-09-01 20:57:31 【问题描述】:

我正在使用 Python 应用程序处理 Google BigQuery。

我有一个包含列表的字段的数据框,我们称之为“关键字”。我还有一个 BigQuery 表,其关键字字段为 STRING 且 mode=REPEATED。

这是我的 BigQuery 表的架构:

My BigQuery table schema

SCHEMA = [
    bq.SchemaField("id", "STRING", mode="NULLABLE"),
    bq.SchemaField("fecha", "DATE", mode="NULLABLE"),
    bq.SchemaField("keywords", "STRING", mode="REPEATED")
]

这是我的代码:

import pandas as pd
from datetime import date
from google.cloud import bigquery as bq

df_dict = 
    "id": ["asdf173","qwer783","vcda619"],
    "fecha": [date(2019,1,15), date(2019,1,28), date(2019,2,12)],
    "keywords": [['a','b'], ['c','d','e'],['f']]


df = pd.DataFrame(df_dict)

client = bq.Client()
dataset = client.dataset(dataset_name)
table_ref = dataset.table(table_name)

client.load_table_from_dataframe(df, table_ref).result()

当我尝试将数据框上传到 BigQuery 表时出现以下错误:

400 提供的架构与表项目 ID:数据集名称.表名称不匹配。字段关键字的类型已从 STRING 更改为 RECORD。

我该如何解决?

【问题讨论】:

您好 Felipe,欢迎您,您能否提供 WebUI 中表格结构的屏幕截图以进行高级故障排除 谢谢 Tamir,您是指架构吗?我的桌子还是空的。 是的架构,所以我们将能够在您的代码和表结构之间进行比较,给出您遇到的错误 完成!给你:i.stack.imgur.com/KqBqx.png 【参考方案1】:

鉴于此错误消息:

400 提供的架构与表项目 ID:数据集名称.表名称不匹配。字段关键字的类型已从 STRING 更改为 RECORD。

以及你提供的表格结构

您可以看到您正在尝试将 ARRAY aka RECORD 插入到字符串字段中。

您需要将字段关键字的类型从String更改为RECORD才能解决您的问题

【讨论】:

感谢您的回答塔米尔。我不允许更改 BigQuery 表的结构。不依赖我,客户端有这个结构,一定是这样。 所以在插入之前将你的数据更改为 json 和字符串。使用 JSON sql 函数来获取数据,或者如果可能的话,在你的 python 代码上解析它 @FelipPellicer,希望我的回答对你有所帮助,如果你能接受的话会很好,在这个链接中查看如何:meta.stackexchange.com/questions/5234/… 和这个链接:***.com/help/someone-answers

以上是关于Python 列表到 BigQuery 重复字符串的主要内容,如果未能解决你的问题,请参考以下文章

Python BigQuery - 如果行是新的并忽略重复的行,如何附加到表中

如何在存储为字符串的 bigquery 字段中取消嵌套多个数组?

创建中间重复字符串,并在 BigQuery 中传递给 UDF

Python列表,字符串,转换[重复]

使用 python 和 BigQuery API 获取 BigQuery 数据集中的表列表

使用 Pandas 或命令行上传到 BigQuery 时出现奇怪的重复字段错误。所有字段唯一