spark首次写入Hive orc表报错

The format of the existing table project_bsc_dhr.bloc_views is HiveFileFormat. It doesn't match the specified format OrcFileFormat.;

new_df.write.mode(SaveMode.Append).format("orc").partitionBy("nd").saveAsTable("table1")
将Append改为Overwrite,先写入一部分数据,然后再改成Append

 

创建 `timestamp` 类型临时,同步数据变成 `bigint` 后写入 Hive 临时报错数据类型不支持,可能有以下原因: ### 数据同步工具问题 数据同步工具在同步过程中可能会对数据类型进行自动转换。例如,某些工具可能默认将 `timestamp` 类型的数据转换为 `bigint` 类型,以方便处理或存储。这可能是由于工具的配置问题或者其内部的类型映射规则导致的。 ### 数据源问题 数据源中的数据类型可能与临时定义的 `timestamp` 类型不匹配。如果数据源中的数据本身就是 `bigint` 类型,那么在同步过程中就不会进行类型转换,直接将 `bigint` 数据写入临时。这样,当将这些 `bigint` 数据写入 Hive 临时的 `timestamp` 类型字段时,就会出现类型不匹配的错误。 ### 数据处理逻辑问题 在数据同步过程中,可能存在自定义的数据处理逻辑,这些逻辑可能会对数据类型进行错误的转换。例如,在编写 SQL 查询或使用 ETL 脚本时,可能错误地将 `timestamp` 类型的数据转换为 `bigint` 类型。 ### Hive 元数据问题 Hive 的元数据可能存在错误或不一致的情况。如果 Hive 元数据中对临时的类型定义与实际的类型不一致,可能会导致数据写入时出现类型不匹配的错误。 ### 示例代码说明问题 假设创建了一个 `timestamp` 类型的临时: ```sql CREATE TEMPORARY TABLE temp_table ( id INT, time_column TIMESTAMP ); ``` 如果在同步数据时,由于某种原因将 `time_column` 字段的数据转换为 `bigint` 类型,例如: ```sql INSERT INTO temp_table SELECT id, unix_timestamp(time_column) as time_column -- 错误地将 timestamp 转换为 bigint FROM source_table; ``` 当将 `temp_table` 中的数据写入 Hive 临时时: ```sql CREATE TEMPORARY TABLE hive_temp_table ( id INT, time_column TIMESTAMP ); INSERT INTO TABLE hive_temp_table SELECT * FROM temp_table; ``` 就会因为 `time_column` 字段的数据类型不匹配而报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值