【问题标题】:Can we create parquet table from existing?我们可以从现有的创建镶木地板吗?
【发布时间】:2020-11-25 19:58:56
【问题描述】:

我有一张包含大量数据的表格。 我必须从中获取几列并创建一个镶木地板表。 以下是我所做的-

CREATE TABLE parqfiletable
AS
SELECT col2, col4, col8 FROM txtfiletable
STORED AS PARQUET;

这是成功的,但是当我试图从 parquet 表中检索数据时,它会抛出一个错误。

此外,相同的创建表语句现在不起作用。

我会以正常方式完成此操作,例如创建存储为镶木地板的表定义,然后从原始源加载数据。但是上面的操作在那个时候立即起作用并且表被创建了。

能否请您让我理解 create table 语句有什么问题? 我们不能创建“CREATE AS .. STORED AS PARQUET”吗?

【问题讨论】:

    标签: hive parquet


    【解决方案1】:
    CREATE TABLE parqtab
    AS
    SELECT col2, FROM txtfiletable
    AS PARQUET;
    

    这样我们可以创建它,但根据扩展属性,这不是 PARQUET 表。

    Detailed Table Information  Table(tableName:parqtab, dbName:dbtest, owner:cloudera, createTime:1606338549, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:col2, type:string, comment:null)], location:hdfs://quickstart.cloudera:8020/user/hive/warehouse/dbtest.db/parqtab, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{numFiles=1, transient_lastDdlTime=1606338550, COLUMN_STATS_ACCURATE=true, totalSize=68, numRows=3, rawDataSize=65}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE)
    

    观察:

    inputFormat:org.apache.hadoop.mapred.TextInputFormat,
    outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false,
    

    我直接创建了一个拼花桌。

    create table parqtab2(id int) stored as parquet;
    

    详细信息在这里。

    Detailed Table Information  Table(tableName:parqtab2, dbName:dbtest, owner:cloudera, createTime:1606338696, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:id, type:int, comment:null)], location:hdfs://quickstart.cloudera:8020/user/hive/warehouse/dbtest.db/parqtab2, inputFormat:org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1606338696}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE)    
    

    从扩展属性观察:

    inputFormat:org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat,
    outputFormat:org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
    

    【讨论】:

      【解决方案2】:

      我找到了上述问题的正确语法。

      CREATE TABLE parqtable STORED AS PARQUET AS SELECT * FROM textfiletable;

      【讨论】:

        猜你喜欢
        • 2021-08-09
        • 1970-01-01
        • 2022-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        相关资源
        最近更新 更多