मैं समझता हूं कि डेटाप्रोक वर्कफ़्लो-टेम्पलेट्स अभी भी बीटा में हैं, लेकिन आप निष्पादन योग्य एसक्यूएल में ऐड-जॉब के माध्यम से पैरामीटर कैसे पास करते हैं? यहाँ एक बुनियादी उदाहरण है:

#/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");) विभाजन बन जाता है, लेकिन दुर्भाग्य से इसे पैरामीटरयुक्त करने की आवश्यकता है।

BTW - मुझे जो त्रुटि मिलती है वह लगातार इस तरह है: त्रुटि: कथन संकलित करते समय त्रुटि: FAILED: ParseException पंक्ति 1:48 '${DATE_PARTITION}' ')'' '' के निकट इनपुट को स्थिर रूप से नहीं पहचान सकती

मैं शायद करीब हूं लेकिन मुझे यकीन नहीं है कि मैं क्या खो रहा हूं।

टीआईए, मेलिसा

1
Melissa 19 अक्टूबर 2017, 02:49

1 उत्तर

अपडेट: डेटाप्रोक में अब वर्कफ़्लो टेम्प्लेट पैरामीटराइज़ेशन, एक बीटा फ़ीचर है:

https://cloud.google.com/dataproc/docs/concepts/workflows/workflow-parameters

अपने विशिष्ट मामले के लिए, आप निम्न कार्य कर सकते हैं:

एक खाली टेम्प्लेट बनाएं

gcloud beta dataproc workflow-templates create my-template

उस मान के लिए प्लेसहोल्डर के साथ नौकरी जोड़ें जिसे आप पैरामीटर करना चाहते हैं

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=PLACEHOLDER"

टेम्पलेट कॉन्फ़िगरेशन को फ़ाइल में निर्यात करें

gcloud beta dataproc workflow-templates export my-template \
--destination=hive-template.yaml

पैरामीटर जोड़ने के लिए फ़ाइल संपादित करें

jobs:
- hiveJob:
    queryFileUri: gs://mybucket/first-job.sql
    scriptVariables:
      DATE_PARTITION: PLACEHOLDER
  stepId: 0_first-job
parameters:
- name: DATE_PARTITION
  fields:
  - jobs['0_first-job'].hiveJob.scriptVariables['DATE_PARTITION']

परिवर्तन आयात करें

gcloud beta dataproc workflow-templates import my-template \
--source=hive-template.yaml

एक प्रबंधित क्लस्टर या क्लस्टर चयनकर्ता जोड़ें

gcloud beta dataproc workflow-templates set-managed-cluster my-template \
--cluster-name=my-cluster \
--zone=us-central1-a

पैरामीटर के साथ अपना टेम्प्लेट चलाएं

gcloud beta dataproc workflow-templates instantiate my-template \
--parameters="DATE_PARTITION=${DATE_PARTITION}"
2
Mikayla Konst 20 जुलाई 2018, 23:34