【发布时间】:2018-03-30 23:03:03
【问题描述】:
我知道 dataproc 工作流模板仍处于测试阶段,但是如何通过 add-job 将参数传递到可执行 sql 中?这是一个基本示例:
#/bin/bash
DATE_PARTITION=$1
echo DatePartition: $DATE_PARTITION
# sample job
gcloud beta dataproc workflow-templates add-job hive \
--step-id=0_first-job \
--workflow-template=my-template \
--file='gs://mybucket/first-job.sql' \
--params="DATE_PARTITION=$DATE_PARTITION"
gcloud beta dataproc workflow-templates run $WORK_FLOW
gcloud beta dataproc workflow-templates remove-job $WORK_FLOW --step-
id=0_first-job
echo `date`
这是我从 shell 调用的 first-job.sql 文件:
SET hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
SET mapred.output.compress=true;
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;
USE mydb;
CREATE EXTERNAL TABLE if not exists data_raw (
field1 string,
field2 string
)
PARTITIONED BY (dt String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION 'gs://data/first-job/';
ALTER TABLE data_raw ADD IF NOT EXISTS PARTITION(dt="${hivevar:DATE_PARTITION}");
在 ALTER TABLE 语句中,正确的语法是什么?我已经尝试了超过 15 种变化,但没有任何效果。如果我像这样对它进行硬编码(ALTER TABLE data_raw ADD IF NOT EXISTS PARTITION(dt="2017-10-31");)分区就会创建,但不幸的是它需要参数化。
顺便说一句——我收到的错误始终是这样的: 错误:编译语句时出错:FAILED:ParseException line 1:48 cannot identify input near '${DATE_PARTITION}' ')' '' in constant
我可能很接近,但不确定我错过了什么。
TIA, 梅丽莎
【问题讨论】: