bq命令行中无法识别的名称错误
Unrecognised name error in bq command line
我想获取 table 的记录数。我写了以下程序。
Create or replace procedure
procedurename(In tablename string)
Begin
Declare sql1 string
Set sql1= 'select count(*) from ' ||tablename;
Execute immediate sql1;
End;
问题:
- 当我使用 invoke sp 在 bq 控制台中执行它时,它会给我计数。
但是当我在 bq 命令行中使用
bq 查询 --use_legacy_sql=false 'call procedurename (tablename)'
它给我的错误是 'unrecognized name : tablename'。为什么会这样?
谢谢。
回答您的问题:
- 您收到
Unrecognized name:'tablename'
错误,因为在您的查询中 tablename
未定义。
尝试使用以下命令来执行您的存储过程
bq query \
--use_legacy_sql=false \
‘DECLARE tablename STRING DEFAULT NULL;
set tablename="your-table-name";
CALL `projectid.datasetid.procedurename`(tablename);’
- 要将 table 名称作为参数传递,您可以尝试使用 documentation 中提到的 bq 命令行或客户端库。
例如在 bq 命令行中:
bq query \
--use_legacy_sql=false \
--parameter=tablename:string:your-table-name \
'DECLARE tablename STRING ;
CALL `projectid.datasetid.procedurename`(@tablename);'
对评论#1 的回答:
- 无法使用 bq 命令行在运行时传递用户输入,但您可以使用客户端库来在运行时传递 table 名称。
例如参考这个python脚本:
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client(project="project_id")
mytable1=raw_input("Enter your table: ")
query = """
DECLARE tablename STRING ;
CALL `project_id.dataset.procFedurename`(@tablename);
"""
job_config = bigquery.QueryJobConfig(
query_parameters=[
bigquery.ScalarQueryParameter("tablename", "STRING", mytable1),
]
)
job = client.query(query, job_config=job_config) # Make an API request.
for row in job.result():
print("No of records:{}".format(row[0]))
我想获取 table 的记录数。我写了以下程序。
Create or replace procedure
procedurename(In tablename string)
Begin
Declare sql1 string
Set sql1= 'select count(*) from ' ||tablename;
Execute immediate sql1;
End;
问题:
- 当我使用 invoke sp 在 bq 控制台中执行它时,它会给我计数。 但是当我在 bq 命令行中使用 bq 查询 --use_legacy_sql=false 'call procedurename (tablename)' 它给我的错误是 'unrecognized name : tablename'。为什么会这样?
谢谢。
回答您的问题:
- 您收到
Unrecognized name:'tablename'
错误,因为在您的查询中tablename
未定义。
尝试使用以下命令来执行您的存储过程
bq query \
--use_legacy_sql=false \
‘DECLARE tablename STRING DEFAULT NULL;
set tablename="your-table-name";
CALL `projectid.datasetid.procedurename`(tablename);’
- 要将 table 名称作为参数传递,您可以尝试使用 documentation 中提到的 bq 命令行或客户端库。
例如在 bq 命令行中:
bq query \
--use_legacy_sql=false \
--parameter=tablename:string:your-table-name \
'DECLARE tablename STRING ;
CALL `projectid.datasetid.procedurename`(@tablename);'
对评论#1 的回答:
- 无法使用 bq 命令行在运行时传递用户输入,但您可以使用客户端库来在运行时传递 table 名称。
例如参考这个python脚本:
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client(project="project_id")
mytable1=raw_input("Enter your table: ")
query = """
DECLARE tablename STRING ;
CALL `project_id.dataset.procFedurename`(@tablename);
"""
job_config = bigquery.QueryJobConfig(
query_parameters=[
bigquery.ScalarQueryParameter("tablename", "STRING", mytable1),
]
)
job = client.query(query, job_config=job_config) # Make an API request.
for row in job.result():
print("No of records:{}".format(row[0]))