Невозможно создать таблицу Hive с типом данных TIMESTAMP в Azure Databricks - PullRequest
1 голос
/ 21 июня 2020

org. apache .had oop .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/"
             """)

1 Ответ

1 голос
/ 21 июня 2020

Согласно Hive-6384 Jira, Начиная с Hive-1.2 вы можете использовать типы Timestamp,date в паркетных таблицах.

Обходные пути для Hive <1.2 версии: </strong>

1. Использование типа String:

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.

Использование a 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/';

OR C поддерживает оба типа timestamp, date

...