编写gpfdist配置

gpfdist配置是一个YAML 1.1文档。它指定在装载或者抽取数据时gpfdist用来选择一种转换并应用的规则。

这个gpfdist配置的例子包含下列项:

  • 定义TRANSFORMATIONS的config.yaml文件
  • config.yaml文件中引用的input_transform.sh包装器脚本
  • input_transform.sh中调用的joost转换input_transform.stx

除普通的YAML规则(如文档用三个破折号开始(-—))之外,gpfdist配置必须符合下列限制:

  1. VERSION设置必须出现并且值为1.0.0.1。
  2. TRANSFORMATIONS设置必须出现并且包含一个或者更多个映射。
  3. TRANSFORMATION中的每一个映射必须包含:
    • 一个值为’input’或者’output’的TYPE
    • 一个表明转换如何运行的COMMAND。
  4. TRANSFORMATION中的每一个映射可以包含可选的CONTENT、SAFE以及STDERR设置。

下面这个称为config.YAML的gpfdist配置适用于prices的例子。每一行开始的缩进是有意义的,它们反映了该说明的层级性。下面例子中的名称prices_input将在后面用SQL创建该表时引用。

  1. ---
  2. VERSION: 1.0.0.1
  3. TRANSFORMATIONS:
  4. prices_input:
  5. TYPE: input
  6. COMMAND: /bin/bash input_transform.sh %filename%

COMMAND设置使用了一个名为input_transform.sh的包装器脚本,它带有一个%filename%占位符。当gpfdist运行该prices_input转换时,它用/bin/bash调用input_transform.sh,并且将%filename%占位符替换为要转换的输入文件的路径。名为input_transform.sh的包装器脚本包含调用STX转换并返回其输出的逻辑。

如果使用了Joost,则必须安装Joost STX引擎。

  1. #!/bin/bash
  2. # input_transform.sh - sample input transformation,
  3. # demonstrating use of Java and Joost STX to convert XML into
  4. # text to load into Greenplum Database.
  5. # java arguments:
  6. # -jar joost.jar joost STX engine
  7. # -nodecl don't generate a <?xml?> declaration
  8. # $1 filename to process
  9. # input_transform.stx the STX transformation
  10. #
  11. # the AWK step eliminates a blank line joost emits at the end
  12. java \
  13. -jar joost.jar \
  14. -nodecl \
  15. $1 \
  16. input_transform.stx \
  17. | awk 'NF>0

input_transform.sh文件使用带有AWK解释器的Joost STX引擎。下面的图表展示了gpfdist运行该转换的处理流程。

编写gpfdist配置 - 图1

上级主题: 转换XML数据