首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas-gbq目前是否支持参数化查询?

pandas-gbq目前是否支持参数化查询?
EN

Stack Overflow用户
提问于 2019-12-17 19:50:41
回答 3查看 882关注 0票数 2

我需要使用Pandas/ Pandas -gbq在Python语言中创建一个简单的ETL管道,每天将给定日期范围内的数据从BigQuery读取到Pandas数据帧中,并根据查询结果创建单独的日表(写回BigQuery)。

尽管可能有更好、更有效的方法(注意:我不是软件工程师),但我目前正在研究BigQuery中的Parameterized Queries来参数化日期列,并在Python中的for循环中迭代这一过程。

有人知道pandas-gbq目前是否支持参数化查询吗?提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2019-12-17 20:02:12

是的,确实如此。然而,我建议你切换到官方的谷歌BigQuery客户端库,它也支持参数。

BigQuery客户端库:https://cloud.google.com/bigquery/docs/reference/libraries#client-libraries-install-python

使用Pandas GBQ设置参数

配置: dict,用于作业处理的可选查询配置参数。例如:

configuration = {‘query’: {‘useQueryCache’: False}}

以下是来自该链接完整代码示例,其中描述了如何在Pandas GBQ中参数化查询:

代码语言:javascript
复制
import pandas

sql = """
    SELECT name
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state = @state
"""
query_config = {
    'query': {
        'parameterMode': 'NAMED',
        'queryParameters': [
            {
                'name': 'state',
                'parameterType': {'type': 'STRING'}
            },
        ]
    }
}
df = pandas.read_gbq(sql, configuration=query_config)

使用BigQuery客户端库设置参数

这里有一篇关于从Pandas-GBQ迁移到BigQuery客户端库的优秀文章:https://cloud.google.com/bigquery/docs/pandas-gbq-migration

代码语言:javascript
复制
table_name = "my_table"
job_config = bigquery.QueryJobConfig()
# Set the destination table
table_ref = client.dataset(dataset_id).table(table_name)
job_config.destination = table_ref
job_config.write_disposition = 'WRITE_APPEND'
sql = """
SELECT * FROM dataset.table WHERE visit_date = date
"""
query_params = [bigquery.ScalarQueryParameter('date', 'DATE', date)]
job_config.query_parameters = query_params

# Start the query, passing in the extra configuration.
query_job = client.query(
    sql,
    location='EU',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish
票数 2
EN

Stack Overflow用户

发布于 2021-03-21 00:14:01

一种简单的方法是使用.to_dataframe()

代码语言:javascript
复制
df = client.query(query, job_config=job_config).to_dataframe()

请参考下面的文档。

Download query results to DataFrame

Google Cloud Client Libraries for google-cloud-bigquery

以下是示例代码:

代码语言:javascript
复制
name = 'John'

project_id = 'bqproject'
dataset_id = 'bqdataset'
table = 'bqtable'

query =  """SELECT * FROM `%s.%s.%s` WHERE Name = @name"""%(project_id,dataset_id,table)

job_config = bigquery.QueryJobConfig(
    query_parameters=[
        bigquery.ScalarQueryParameter("name", "STRING", name),
        
        ]
    )

df = client.query(query, job_config=job_config).to_dataframe()
df
票数 1
EN

Stack Overflow用户

发布于 2020-06-03 18:54:40

Ben P发布的答案需要使用Pandas GBQ进行一些改进,因为我们得到了以下错误:

GenericGBQException:原因: 400 POST https://bigquery.googleapis.com/bigquery/v2/projects/my-bigquery/jobs:缺少查询参数值

重要且缺少的配置参数是:

代码语言:javascript
复制
'parameterValue': {'value': 'TX'}

可以在Running a query with a configuration文档示例中查看。

将查询配置放在一起,我们会得到:

代码语言:javascript
复制
query_config = {
    'query': {
        'parameterMode': 'NAMED',
        'queryParameters': [
            {
                'name': 'state',
                'parameterType': {'type': 'STRING'},
                'parameterValue': {'value': 'TX'}
            },
        ]
    }
}

我认为这将帮助我们中的大多数人找到问题的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59373681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档