将bigquery中的所有列转换为float/string

问题描述 投票:0回答:2

我正在尝试使用 python 下载 BQ 表,如下所示: 从 google.cloud 导入 bigquery

client = bigquery.Client()
SQL_QUERY = """
SELECT *
FROM TABLE
"""
df = client.query(SQL_QUERY).to_dataframe()

我在回溯中收到以下错误。看起来,google-cloud-sdk 首先将表转换为 JSON 格式,然后转储为 CSV。

    converter = _CELLDATA_FROM_JSON[field.field_type]
KeyError: 'NUMERIC'

我有两个问题:

  1. 有没有办法在使用 Python 下载之前将 BQ 中的所有列转换为浮点数/字符串?
  2. 如何确定哪些列引起了问题?
python google-bigquery
2个回答
0
投票

如果您明确提及列名称,您的查询会变得更具可读性。

假设您的表格有 3 列(

a
b
c
)。如果您想将它们转换为浮点数,您只需将查询修改为:

SQL_QUERY = """
  SELECT 
    cast(a as float64) as a, 
    cast(b as float64) as b, 
    cast(c as float64) as c
  FROM TABLE
"""

0
投票

我知道这是一个旧线程,但无论如何还是想回答。 您可以立即执行。

    EXECUTE IMMEDIATE(
  SELECT
    '''SELECT '''||STRING_AGG('cast(' || column_name|| ' as string) as '|| column_name, ", ") ||''' from Dataset.Table_Name'''
  FROM (
    SELECT
      column_name
    FROM
      `Project_Name.Dataset.INFORMATION_SCHEMA.COLUMNS`
    WHERE
      table_name = 'Table_Name') )
© www.soinside.com 2019 - 2024. All rights reserved.