2017-10-18 4 views
0

Je comprends que les modèles de flux de travail dataproc sont toujours en version bêta, mais comment transmettre les paramètres via le complément dans l'exécutable sql? Voici un exemple de base:passer des paramètres via des modèles de workflow 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` 

Voici mon premier fichier-job.sql appelé de la coquille:

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}"); 

Dans l'instruction ALTER TABLE, quelle est la syntaxe correcte? J'ai essayé ce qui ressemble à plus de 15 variations mais rien ne fonctionne. Si je le code dur comme ceci (ALTER TABLE data_raw AJOUTER SI NON EXISTS PARTITION (dt = "2017-10-31");) la partition est créée, mais elle doit malheureusement être paramétrée.

BTW - L'erreur que je reçois est toujours comme ceci: Erreur: Erreur lors de la déclaration compilation: failed: ligne ParseException 01h48 ne peut pas reconnaître l'entrée près de « $ {DATE_PARTITION} » «) » « » en constante

Je suis probablement proche mais je ne sais pas ce que je manque.

TIA, Melissa

Répondre

0

Merci pour essayer Workflows! Un support de premier ordre pour le paramétrage fait partie de notre feuille de route. Cependant, pour l'instant votre astuce remove-job/add-job est la meilleure solution.

En ce qui concerne votre question:

  • Les valeurs transmises par params sont accessibles en ${hivevar:PARAM} (voir [1]). Vous pouvez également définir --properties auxquels vous accédez en tant que ${PARAM}

  • Les parenthèses entourant les paramètres ne sont pas nécessaires. Si elle est destinée à gérer les espaces dans les valeurs des paramètres utilisent des citations comme: --params="FOO=a b c,BAR=X"

  • Enfin, je remarquais un espace errante ici DATE_PARTITION =$1 qui se traduit probablement vide DATE_PARTITION valeur

Hope this helps!

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

+0

Ugh ... merci, qui a travaillé. J'ai corrigé l'exemple de code dans le message d'origine à la version de travail, au cas où il pourrait aider quelqu'un d'autre. :) – Melissa