我尝试使用 Shirt = 10$
pants = 20$
shoes = 60$
hat = 10$
socks = 5$
命令通过bash执行查询。查询在通过Web UI以及应用脚本@ script.google.com执行时有效。但是,当作为简单的bash(或仅通过cmd提示符)执行时,我会一直收到bq
。 Col 393指的是陈述时的案件的中间部分。我已经做了很多搜索,无法弄清楚我做错了什么(因为查询在别处工作)。有人可能会对导致错误的原因提出建议吗?
"Syntax error: Unexpected keyword THEN at [1:393]"
非常感谢你的帮助。 Brian P
答案 0 :(得分:1)
这里的问题是由于在查询中使用相同的单引号引起的,这些引号与包装整个查询的引号相同。
您的选择:
when freq = \'1\' then \'a\'
when freq = "1" then "a"
cat your_query.sql | bq query
选项3 :是最优雅的解决方案,也有助于以一种很好的方式组织代码,将SQL保持为SQL,而不是直接在bash代码中嵌入大量SQL。您不需要对当前SQL进行任何更改。
完整示例看起来像
cat your_query.sql | bq query \
--destination_table abcdefcloud:ds_tables.daily_over_frequency_output \
--replace \
--use_legacy_sql=false
your_query.sql
包含的位置:
with freq as
(select month as month,campaign_id,campaign,case when freq = '1' then 'a'
when freq = '2' then 'b'
when freq = '3-6' then 'c'
when freq = '7-9' then 'd'
when freq = '10-19' then 'e'
when freq = '20-29' then 'f'
when freq = '30-39' then 'g'
when freq = '40-49' then 'h'
when freq = '50-59' then 'i'
when freq = '60-69' then 'j'
when freq = '70-79' then 'k'
when freq = '80-89' then 'l'
when freq = '90-99' then 'm'
when freq = '100+' then 'n'
else 'other' end as sort,
freq,sum(imps) as imps,sum(uu) as uu from...
答案 1 :(得分:0)
假设freq
列是数字(可能应该是),那么CASE
表达式应该失败,因为3-6
不是有效数字。请尝试使用此版本:
case
when freq = 1 then 'a'
when freq = 2 then 'b'
when freq between 3 and 6 then 'c'
when freq between 7 and 9 then 'd'
when freq between 10 and 19 then 'e'
when freq between 20 and 29 then 'f'
...
when freq > 100 then 'n'
else 'other' end as sort
答案 2 :(得分:0)
我认为这是你的问题:
freq = '1' then 'a'
如果仔细查看引号,您会发现它们与引用查询的类型相同:)这最终会被评估为:
freq = then
......我认为不是你想要的。如果您使用双引号,它应该“正常工作”,减去查询中的任何语义错误。