我使用JNI specification作为参考,我想到了以下脚本:
bq --location=US query --use_legacy_sql=False \
--parameter = 'ts_value:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)),interval 5 hour)' \
--parameter = 'ts_value2:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY)),interval 5 hour)' \
'with base_query as (
select * from table1 t1
inner join table2 t2
on
t1._id = t2.table1_id
where mydate >= @ts_value2 and mydate <@ts_value
),
another_query as (
select * from table3
where this_Date = @ts_value
)
select bq.*,aq.*;'
但这给我一个错误
-参数='昨天:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(),间隔1天)),间隔5小时)'\ 您在BigQuery CLI中遇到错误。请在我们的公共问题跟踪器中提交错误报告: this 请简要说明导致此问题的步骤,以及可以通过以下信息公开的任何行:
======================================== ==平台== CPython:2.7.13:Linux-4.14.94 + -x86_64-with-debian-9.8 == bq版本== 2.0.43 ==命令行== ['/ google / google-cloud-sdk / platform / bq / bq.py','--use_gce_service_account','--project = bykea-145712','--location = US', 'query','--use_legacy_sql = False','--parameter','=','ts_value:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY)),间隔5小时)',' '] == UTC时间戳== 2019-04-08 07:02:36 ==错误跟踪== 追溯(最近一次通话): 在RunSafely中,将文件“ /google/google-cloud-sdk/platform/bq/bq.py”第1073行 return_value = self.RunWithArgs(* args,** kwds) 在RunWithArgs中的文件“ /google/google-cloud-sdk/platform/bq/bq.py”,行1905 kwds ['query_parameters'] = _ParseParameters(self.parameter) _ParseParameters中的文件“ /google/google-cloud-sdk/platform/bq/bq.py”,行5165 results.append(_ParseParameter(param_string)) _ParseParameter中的文件“ /google/google-cloud-sdk/platform/bq/bq.py”,行5170 名称,param_string = param_string.split(':',1) ValueError:需要多个值才能解压 ======================================
查询操作中的意外异常:您在BigQuery CLI中遇到了一个错误。请在我们的公共问题跟踪器中提交错误报告: https://issuetracker.google.com/issues/new?component=187149&template=0 请简要说明导致此问题的步骤,以及可以通过以下信息公开的任何行: -bash:--parameter:找不到命令
我在做什么错?在参数中传递函数的正确方法是什么,我也想知道在大查询云外壳中编写查询的正确方法是什么?当我使用参考中给出的示例时,它工作正常,但是当我更改参数并查询它时,开始出现此错误
答案 0 :(得分:1)
我在做什么错了?
您正在尝试将SQL函数逻辑添加到应包含文字值的参数中。
我会改变这一点:
--parameter = 'ts_value:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)),interval 5 hour)' \
对此:
--parameter = 'ts_value:INT64:5' \
对@ts_value
的查询如下:
with base_query as (
select * from table1 t1
inner join table2 t2
on
t1._id = t2.table1_id
where mydate >= @ts_value2 and mydate < TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)),interval @ts_value hour)
),
another_query as (
select * from table3
where this_Date = @ts_value
)
select bq.*,aq.*;
注意:您还需要添加其他变量以获得完整的SQL