如何在 query_to_pandas 中使用变量

Posted

技术标签:

【中文标题】如何在 query_to_pandas 中使用变量【英文标题】:How to use variables in query_to_pandas 【发布时间】:2019-07-07 20:58:22 【问题描述】:

刚刚使用 BigQuery 和其他东西被倾倒到 SQL 中,所以我不知道这类东西的很多术语。目前正在尝试制作一种输入字符串(要取出的数据集名称)的方法。但是如果不返回错误,我似乎无法将字符串放入我想要的变量中。

我查找了如何为 SQL 内容添加变量,但这些解决方案中的大多数都不适合我的情况。然后我最终添加了 $s 并在 """ 变量之前添加了 s。(这最终导致语法错误)

import pandas as pd
import bq_helper
from bq_helper import BigQueryHelper
# Some code about using BQ_helper to get the data, if you need it lmk

# test = `data.patentsview.application`

query1 = s"""
SELECT * FROM $s
LIMIT
 20;
        """
response1 = patentsview.query_to_pandas_safe(query1)
response1.head(20)

上面的代码返回错误代码

File "<ipython-input-63-6b07957ebb81>", line 8
    """

^
SyntaxError: invalid syntax 

编辑: 有效但必须手动强制执行的原始代码是这样的

query1 = """
SELECT * FROM `patents-public-data.patentsview.application`
LIMIT
 20;
        """
response1 = patentsview.query_to_pandas_safe(query1)
response1.head(20)

【问题讨论】:

尝试从query1 = s"""中删除s,看看是否有效。 返回错误[400 POST googleapis.com/bigquery/v2/projects/micro-bus-245218/jobs: 语法错误:非法输入字符“$” at [2:15]] 【参考方案1】:

如果我对您的理解正确,这可能就是您要查找的内容:

#making up some variables:
vars = ['`patents-public-data.patentsview.application','`patents-private-data.patentsview.application']

for var in vars:
    query = f"""SELECT * FROM var
LIMIT
 20;
 """
    print(query)

输出:

 SELECT * FROM `patents-public-data.patentsview.application
LIMIT
 20;

SELECT * FROM `patents-private-data.patentsview.application
LIMIT
 20;

【讨论】:

【参考方案2】:

我相信这应该会有所帮助:https://cloud.google.com/bigquery/docs/parameterized-queries#bigquery_query_params_named-python:

要指定命名参数,请使用@ 字符后跟标识符,例如@param_name

【讨论】:

以上是关于如何在 query_to_pandas 中使用变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Netezza nzsql 中使用会话变量?

如何在shell脚本中使用变量

在Android中如何使用全局变量

如何在发布管道中使用输出变量

如何在shell脚本中使用变量

如何在sed中使用变量