无法在 Azure Databricks 中创建具有 TIMESTAMP 数据类型的 Hive 表
Posted
技术标签:
【中文标题】无法在 Azure Databricks 中创建具有 TIMESTAMP 数据类型的 Hive 表【英文标题】:Not able to create Hive table with TIMESTAMP datatype in Azure Databricks 【发布时间】: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/"
""")
【问题讨论】:
【参考方案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 中更新配置单元元存储版本以上是关于无法在 Azure Databricks 中创建具有 TIMESTAMP 数据类型的 Hive 表的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure Key Vault 支持的 Databricks 中创建秘密范围失败
如何从 Azure Databricks 在 Azure Blob 中创建一个空文件夹
在 Spark Azure Databricks 中创建自定义进度条指示器
无法从 azure databricks 在 azure data Lake 中保存文件
Azure Databricks - 导出和导入 DBFS 文件系统
Databricks Connect:无法连接到 azure 上的远程集群,命令:“databricks-connect test”停止