python - 如何在 python 中展平 google bigquery 结果

标签 python google-bigquery

我有一个大型数据库,正在尝试借助 python 和 bigquery API 进行查询。

但问题是它返回一个列表列表,并且我在展平结果方面遇到问题。

现在我正在这样做:

client = bigquery.Client.from_service_accoun_json('...')
query_job = client.query("""...""")
result = query_job.result()

从这里开始,我迷失了,列表可以从 1 级到 3-4 级不等,这使得搜索结果变得极其困难。

有没有一种有效的方法来平坦化结果?

最佳答案

当您说您的查询正在报告具有不同级别数的列表的列表时,我不太清楚您的意思。

在 BigQuery Python 客户端库中,query_jobgoogle.cloud.bigquery.job.QueryJob 类型的对象。为了迭代结果,您只需在代码中添加一个循环,例如:

client = bigquery.Client()
query_job = client.query("...")
for row in query_job:
    print(row)

每个 row 对象都包含从您运行的 BigQuery 查询返回的行之一。根据您使用的是标准 SQL 还是旧版 SQL,行格式会有所不同。标准 SQL 是从 BigQuery 查询数据的推荐和首选语言,但旧版 SQL 的特征之一是 it flattens query results automatically ,因此如果嵌套和重复字段对您来说是个问题,您可以使用它。否则,您可以flatten results in Standard SQL using the UNNEST operator .

为了使用查询结果中的特定字段,您应该只使用 row 对象,如下所示:

  • 对于“普通”字段:row.field1
  • 对于标准 SQL 中的嵌套字段:row.parent[0]["child"]
  • 对于旧版 SQL 中的嵌套字段:row.parent_child

无论如何,通过打印 row 对象之一,您将看到可用字段以及如何迭代它们。一般来说,它们可以像普通的 Python 字典一样对待。

<小时/>

顺便说一句,为了将旧版 SQL 与 Python 客户端库一起使用(默认情况下使用标准 SQL),您只需添加一个 QueryJobConfig 参数,例如:

client = bigquery.Client()
job_config = bigquery.QueryJobConfig()
job_config.use_legacy_sql = True
query_job = client.query("...", job_config=job_config)

关于python - 如何在 python 中展平 google bigquery 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50702145/

相关文章:

python - 如何从末尾开始读取python文件中的行

Python 错误 "IndentationError: expected an indented block"

python - 将向量压缩成笛卡尔积

string - BIGQUERY的STRING到DATE

Python MySQLdb 不返回数据库中的所有数据

python - 多行返回语句

sql - BigQuery 标准 SQL 中 'yearweek' 函数的等价物是什么?

google-cloud-platform - BigQuery 和 Bigtable 有什么区别?

google-bigquery - 如何克服连接联合表与其他表的错误

google-bigquery - BigQuery - 非法转义序列