提问人:Kavya14 提问时间:11/22/2021 最后编辑:Kavya14 更新时间:11/24/2021 访问量:838
bq 命令行中出现无法识别的名称错误
Unrecognised name error in bq command line
问:
我想获取表的记录计数。我写了以下程序。
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 '调用过程名称 (tablename)' 它给了我错误“无法识别的名称:tablename”。为什么会这样?
谢谢。
答:
2赞
Sakshi Gatyan
11/23/2021
#1
回答您的问题:
- 您收到错误,因为您的查询未定义。
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);’
- 要将 tablename 作为参数传递,您可以尝试使用本文档中提到的 bq 命令行或客户端库。
例如,在 bq 命令行中:
bq query \
--use_legacy_sql=false \
--parameter=tablename:string:your-table-name \
'DECLARE tablename STRING ;
CALL `projectid.datasetid.procedurename`(@tablename);'
对评论#1的回答:
- 使用 bq 命令行无法在运行时传递用户输入,但可以改用客户端库在运行时传递表名。
例如,请参阅以下 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]))
评论
0赞
Kavya14
11/23/2021
谢谢。您能否告诉我是否有一种方法可以使用此 SP 打印语句,它会在运行时要求我键入表的名称,并在给出名称后给我结果?
0赞
Kavya14
11/23/2021
嗨,我在 bq 命令行中尝试了上述命令,但我仍然收到“无法识别的名称”错误。
0赞
Sakshi Gatyan
11/23/2021
嗨,@Kavya14,我已经编辑了评论#1的答案。
0赞
Sakshi Gatyan
11/23/2021
我能够使用上述命令成功获得结果。输出。请检查您是否正确使用该命令。如果问题仍然存在,请与命令一起共享您的完整错误。
评论