【问题标题】:Not able to create Hive table with TIMESTAMP datatype in Azure Databricks无法在 Azure Databricks 中创建具有 TIMESTAMP 数据类型的 Hive 表
【发布时间】:2020-06-21 05:23:47
【问题描述】:

org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.UnsupportedOperationException: Parquet 不支持 时间戳。见 HIVE-6384;

在 Azure Databricks 中执行以下代码时出现上述错误。

spark_session.sql("""
                    CREATE EXTERNAL TABLE IF NOT EXISTS dev_db.processing_table
                    (
                      campaign STRING,
                      status STRING,
                      file_name STRING,
                      arrival_time TIMESTAMP
                    )
                    PARTITIONED BY ( 
                      Date DATE)
                    ROW FORMAT SERDE
                      'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
                    STORED AS INPUTFORMAT
                      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
                    OUTPUTFORMAT
                      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
                    LOCATION "/mnt/data_analysis/pre-processed/"
             """)

【问题讨论】:

    标签: pyspark hive parquet azure-databricks


    【解决方案1】:

    根据Hive-6384 Jira,从 Hive-1.2 开始,您可以在 parquet 表中使用 Timestamp,date 类型。

    Hive

    1.使用字符串类型:

    CREATE EXTERNAL TABLE IF NOT EXISTS dev_db.processing_table
                        (
                          campaign STRING,
                          status STRING,
                          file_name STRING,
                          arrival_time STRING
                        )
                        PARTITIONED BY ( 
                          Date STRING)
                       Stored as parquet
                       Location '/mnt/data_analysis/pre-processed/';
    

    然后在处理时您可以将arrival_time,Date 转换为timestamp,date 类型。

    使用 view 并投射列,但 views are slow.

    2. Using ORC format:

    CREATE EXTERNAL TABLE IF NOT EXISTS dev_db.processing_table
                        (
                          campaign STRING,
                          status STRING,
                          file_name STRING,
                          arrival_time Timestamp
                        )
                        PARTITIONED BY ( 
                          Date date)
                       Stored as orc
                       Location '/mnt/data_analysis/pre-processed/';
    

    ORC 同时支持timestamp,date 类型

    【讨论】:

    • 您知道如何在 Azure Databricks 中更新配置单元元存储版本
    猜你喜欢
    • 2014-06-29
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多