2017-10-18 110 views
0

據我所知,dataproc工作流程模板仍處於測試階段,但您如何通過添加作業將參數傳遞到可執行文件sql?這是一個基本的例子:通過dataproc工作流程模板傳遞參數

#/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` 

這裏從外殼打電話給我的第一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」);)分區被創建,但不幸的是它需要參數化。

順便說一句 - 我收到的錯誤是一直這樣的: 錯誤:錯誤在編譯聲明:失敗:ParseException的線1:48無法識別附近「$ {} DATE_PARTITION」「)」「在不斷

」輸入

我可能很接近但不確定我缺少什麼。

TIA, 梅麗莎

回答

0

感謝您試用工作流程!對參數化的一流支持是我們路線圖的一部分。但是現在你的移除工作/添加工作技巧是最好的方法。

關於你提到的具體問題:

  • 通過PARAMS傳遞值作爲${hivevar:PARAM}訪問(見[1])。或者,您可以設置--properties,它們被訪問爲${PARAM}

  • 不需要params周圍的括號。如果它旨在處理參數值空間使用像語錄:--params="FOO=a b c,BAR=X"

  • 最後,我在空DATE_PARTITION值這裏DATE_PARTITION =$1這可能導致注意到一個錯誤的空間

希望這有助於!

[1] How to use params/properties flag values when executing hive job on google dataproc

+0

呃......謝謝你,工作。我將原始文章中的代碼示例更正爲工作版本,並將其用於幫助其他人。 :) – Melissa