在猪的镶木地板上使用蜂巢表

Sau*_*bhG 9 hadoop hive apache-pig hcatalog parquet

我试图在包含两个Parquet文件的文件夹上创建一个带有架构字符串,字符串,double的Hive表.第一个镶木地板文件架构是字符串,字符串,双精度,第二个文件的架构是字符串,双精度,字符串.

CREATE EXTERNAL TABLE dynschema (
 trans_date string,
 currency string,
 rate double) 
STORED AS PARQUET
LOCATION '/user/impadmin/test/parquet/evolution/';
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用pig(0.14)脚本中的hive表.

 A = LOAD 'dynschema' USING org.apache.hive.hcatalog.pig.HCatLoader();

DUMP A;
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误

java.lang.UnsupportedOperationException:无法检查org.apache.hadoop.hive.serde2.io.DoubleWritable

我怀疑是由于第二个文件的模式与表模式不同,因为成功读取了第一个文件的拆分,但在读取第二个文件的拆分时发生此异常.

我也查看了HCatRecordReader's代码并找到了这段代码

DefaultHCatRecord dr = new DefaultHCatRecord(outputSchema.size());
  int i = 0;
  for (String fieldName : outputSchema.getFieldNames()) {
    if (dataSchema.getPosition(fieldName) != null) {
      dr.set(i, r.get(fieldName, dataSchema));
    } else {
      dr.set(i, valuesNotInDataCols.get(fieldName));
    }
    i++;
  }
Run Code Online (Sandbox Code Playgroud)

在这里,我看到存在从数据模式到输出模式的转换逻辑,但在调试时,我发现两个模式都没有区别.

请帮我查一下,

  1. Pig支持这样的情况,即从具有不同模式的多个镶木地板文件创建的hive表中读取数据.

  2. 如果是的话,该怎么做.

Den*_*din 1

如果您有具有两种不同模式的文件,则以下内容似乎是明智的:

  1. 根据文件的架构拆分文件
  2. 用它们制作桌子
  3. 如果需要,加载各个表并将它们存储到超级表中