我正在尝试读取一个BigQuery表,并使用Python将其转换为pandas数据框。这是我用来执行查询的代码:
bq_hook = BigQueryHook(bigquery_conn_id=SRC_CONN, use_legacy_sql=False)
bq_client = bigquery.Client(project = bq_hook._get_field("project"), credentials =bq_hook._get_credentials())
df = bq_client.query(SQL_QUERY).to_dataframe()
(我正在使用Bigquery存储v1 API库)
如果查询返回任何带有未知字符的字符串字段,我会得到以下错误:
ERROR -未知错误:string_with_char>失败的
在我的例子中,这些字符只出现在一列中。
如果我在BQ控制台上执行查询,我可以看到带有"字符"的结果,但是如果我在气流上运行它,DAG就会崩溃,因为它无法读取"字符"。我已经尝试用"@"使用这些解决方案,但似乎没有一个有效:
- .replace() Python函数:由于前面的原因,它不会工作错误,数据帧不能完全创建,所以我不能做任何进一步的处理。
- BQ函数REGEXP_REPLACE:我不能用查询替换字符;如果我使用regexp_replace,它会忽略'字符(事实上,如果我试图获得整个字符串的长度,它不会计算'字符)。
所以基本上我需要一些方法来纠正这个问题,可以应用于我以前发布的代码的第三行;可以是.to_dataframe()函数的参数,也可以是紧随其后的参数。
BigQueryHook
具有get_pandas_df函数
你可以这样做:
bq_hook = BigQueryHook(bigquery_conn_id=SRC_CONN, use_legacy_sql=False)
bq_df = bq_hook.get_pandas_df(sql=SQL_QUERY, dialect="standard")
# continue work on the data frame
至于崩溃——这段代码没有崩溃的原因。如果发生这种情况,可能是一个错误,你应该报告它的气流问题。