国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hive表字段類型轉(zhuǎn)換錯誤解決:Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.

這篇具有很好參考價值的文章主要介紹了Hive表字段類型轉(zhuǎn)換錯誤解決:Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 問題場景

假設(shè)某有數(shù)據(jù)的Hive表temp_table的字段狀況如下,需要將A字段由string類型轉(zhuǎn)為int類型:

字段名稱 字段類型 是否為分區(qū)字段
A string
B int
C bigint
D string

1.1 問題發(fā)生的背景

在Hdfs數(shù)據(jù)庫中,該表的數(shù)據(jù)是以Parquet文件格式存儲的,包含多個分區(qū)。原本在該表中的字段A的類型為int。然而筆者誤操作,將該字段的類型轉(zhuǎn)換為了string,即前文所述的表字段狀態(tài)。

筆者在查詢時發(fā)現(xiàn),用HiveSql查詢不會報錯,而用SparkSql查詢本表時,會報如下錯誤信息:

org.apache.spark.sql.execution.QueryExecutionException: Parquet column cannot be converted in file [文件所在OSS路徑]. Column: [has_explicit_source_keys], Expected: StringType, Found: INT32

錯誤的大致意思為文件中的字段類型和Hive元數(shù)據(jù)中的字段類型不同,且無法強制轉(zhuǎn)換。
為了繼續(xù)可以用spark查詢本表,筆者嘗試修復表字段類型。然而在修復表字段類型時,筆者發(fā)現(xiàn)以下兩種方法都無法完成操作,并且會報錯

1.1 操作方法1

使用如下語句修改Hive表的字段類型時??赡軙l(fā)現(xiàn)字段可以從string轉(zhuǎn)到Int,但不能從Int轉(zhuǎn)回String。

ALTER TABLE temp_table CHANGE CLOUMN A A int;

1.2 操作方法2

  1. 刪除要轉(zhuǎn)換類型的字段A,使原表只剩B、C兩個字段。
  2. 新增字段A,將類型轉(zhuǎn)換為int。由于Hive建表時不允許指定列的位置,所以會添加在表的最后。
  3. 將字段A挪到第一位。本步會報錯,不允許進行此操作。
-- Step1
ALTER TABLE temp_table replace COLUMNS (B int,C bigint);
-- Step2
ALTER TABLE temp_table ADD COLUMNS (A int);
-- Step3(本步會報錯)
ALTER TABLE temp_table CHANGE CLOUMN A A int FIRST;

1.3 報錯信息

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The following columns have types incompatible with the existing columns in their respective positions :
column_name

該錯誤的意思是,Hive表元數(shù)據(jù)中已有的字段類型無法被轉(zhuǎn)換為新指定的字段類型。而且結(jié)合上述操作方法2可知,如果表中有數(shù)據(jù),那么即便刪除了某個字段,其字段類型仍然會保留在原來的位置上。

2 問題分析

查看官方文檔后,可以了解到,列轉(zhuǎn)換操作是由一個參數(shù)控制的:

hive.metastore.disallow.incompatible.col.type.changes 設(shè)置為 false 時,Metastore 中的列類型可以從任何類型更改為任何其他類型。 在執(zhí)行類型更改后,如果新類型可以正確顯示數(shù)據(jù),則將顯示數(shù)據(jù)。 否則,數(shù)據(jù)將顯示為 NULL。

而hive.metastore.disallow.incompatible.col.type.changes這個參數(shù),在Hive2.0后,默認為True。即在字段類型轉(zhuǎn)換時,不再允許顯式轉(zhuǎn)換(強制轉(zhuǎn)換),而是只能進行隱式轉(zhuǎn)換,即由低級類型轉(zhuǎn)換為高級類型。

關(guān)于隱式轉(zhuǎn)換的規(guī)則,Hive官方文檔(需要翻墻后查看該鏈接)中的說明如下:
Hive表字段類型轉(zhuǎn)換錯誤解決:Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
本例中的Hive版本為2.7.2
Hive表字段類型轉(zhuǎn)換錯誤解決:Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.

所以為了實現(xiàn)字段類型的顯式轉(zhuǎn)換,需要設(shè)置hive.metastore.disallow.incompatible.col.type.changes。

3 解決方法

特別注意:在某些環(huán)境下,前兩種方法都不能使該參數(shù)生效,只能使用第三種方法

3.1 在SQL代碼中加參數(shù)

在SQL代碼最前方加入:set hive.metastore.disallow.incompatible.col.type.changes=false;

3.2 在提交Hive程序時,附加上hiveconf參數(shù)

3.3 修改 hive-site.xml文件

在hive 配置文件 hive-site.xml中添加或修改參數(shù):

<property>
<name>hive.metastore.disallow.incompatible.col.type.changes</name>
<value>false</value>
</property>

修改參數(shù)之后,需要重啟Hive服務才能使參數(shù)生效。重啟Hive服務后,使用Hive查詢該參數(shù)值,可以發(fā)現(xiàn)修改成功了
Hive表字段類型轉(zhuǎn)換錯誤解決:Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
同時,可以在DDL語句修改Hive元數(shù)據(jù)中的字段類型時,實現(xiàn)顯式轉(zhuǎn)換。文章來源地址http://www.zghlxwxcb.cn/news/detail-431916.html

到了這里,關(guān)于Hive表字段類型轉(zhuǎn)換錯誤解決:Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 在hive插入數(shù)據(jù)時出現(xiàn)“Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask”報錯

    在hive插入數(shù)據(jù)時出現(xiàn)“Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask”報錯

    這個錯誤代碼表明 Hive 作業(yè)由于某種原因失敗。 ? ?1.資源問題: 這個錯誤可能發(fā)生在集群上存在資源約束的情況下,例如內(nèi)存或 CPU 資源不足以完成 Hive 作業(yè)。 ? ?2.數(shù)據(jù)問題: 它可能與數(shù)據(jù)本身相關(guān)。例如,數(shù)據(jù)可能損壞,或者數(shù)據(jù)格式或模式存在問題,Hive 無法處理。

    2024年02月05日
    瀏覽(31)
  • hive插入數(shù)據(jù)后報錯 FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

    hive 插入數(shù)據(jù)的時候,不能直接運行,報錯 錯誤原因: namenode內(nèi)存空間不夠,JVM剩余內(nèi)存空間不夠新job運行所致 錯誤提示: Starting Job = job_1594085668614_0006, Tracking URL = http://kudu:8088/proxy/application_1594085668614_0006/ Kill Command = /root/soft/hadoop-3.2.1/bin/mapred job -kill job_1594085668614_0006 Hadoop

    2023年04月15日
    瀏覽(22)
  • Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job faile

    Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job faile

    hive on spark 錯誤Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause. 表明Spark任務執(zhí)行失敗,返回了錯誤代碼3。這可能是由于多種原因?qū)е碌?,例如?nèi)存不足、JSON數(shù)據(jù)格式錯

    2024年04月11日
    瀏覽(40)
  • IDEA 運行hql 出現(xiàn)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTas

    啟用的hiveserver2 的模擬用戶功能 ,依賴于Hadoop 提供的proxy user(代理用戶功能),只有Hadoop中的代理用戶才能模擬其他用戶身份訪問 Hadoop集群。 因此,需要將hiverserver2 的啟動用戶設(shè)置為 Hadoop 的代理用戶 修改hadoop 配置文件 core-site.xml 添加如下配置 重啟Hadoop 以及Hive 再次運

    2024年02月11日
    瀏覽(27)
  • 出現(xiàn)錯誤(已解決)RuntimeError: CUDA error: no kernel image is available for execution on the device CUDA ker

    出現(xiàn)錯誤(已解決)RuntimeError: CUDA error: no kernel image is available for execution on the device CUDA ker

    為什么把警告po出來,是因為警告可以讓我們了解一些有用信息。 首先警告里的內(nèi)容不可忽略,翻譯過來就是NVIDIA RTX GeForce 3060Ti(我使用的服務器)支持的CUDA的算力為8.6,與當前的pytorch的版本不匹配。說白了就是CUDA和pytorch版本不一致。 當前的pytorch版本支持的CUDA的算力為

    2024年02月10日
    瀏覽(32)
  • Mysql同步到ES時date和time字段類型轉(zhuǎn)換問題解決辦法

    這個問題中發(fā)生問題的es字段映射類型為date類型?。。?字符串類型的會好很多,關(guān)鍵我這邊是通過logstash生成索引,并且全量同步的,不好改索引類型?。?! 問題描述: 根據(jù)錯誤日志,似乎是Elasticsearch無法解析日期字段 START_TIME 。這個字段的格式是 YYYY-MM-DD HH:MM:SS ,而Ela

    2024年02月16日
    瀏覽(26)
  • Hive更改字段類型的正確姿勢

    step1 更改表名 step2 創(chuàng)建一個和原來表結(jié)構(gòu)相同的名字 step3 原來數(shù)據(jù)按分區(qū)動態(tài)插入

    2024年02月15日
    瀏覽(59)
  • Electron 開發(fā),報handshake failed; returned -1, SSL error code 1,錯誤

    Electron 開發(fā),報handshake failed; returned -1, SSL error code 1,錯誤

    在preload.js代碼中,暴露參數(shù)給渲染線程renderer.js訪問, ?renderer.js ?報:ERROR:ssl_client_socket_impl.cc(978)]?failed; returned -1, SSL error code 1,錯誤 如題所說,跨進程傳遞消息,這意味著訪問將嘗試建立一個不安全的連接,而ssl證書驗證失敗,無法建立連接。 所以我們要做的是: 如何讓

    2024年02月14日
    瀏覽(31)
  • [hive]中的字段的數(shù)據(jù)類型有哪些

    Hive中提供了多種數(shù)據(jù)類型用于定義表的字段。以下是Hive中常見的數(shù)據(jù)類型: 布爾類型(Boolean):用于表示true或false。 字符串類型(String):用于表示文本字符串。 整數(shù)類型(Integers):包括TINYINT(1字節(jié)整數(shù))、SMALLINT(2字節(jié)整數(shù))、INT或INTEGER(4字節(jié)整數(shù))、BIGINT(8字節(jié)

    2024年02月05日
    瀏覽(27)
  • MybatisPlus如何完成字段類型轉(zhuǎn)換

    MybatisPlus如何完成字段類型轉(zhuǎn)換

    先來回憶下在mybatis中的resultMap作用和是什么 在使用傳統(tǒng)的mybatis時,我們一般都會在xml文件定義一個ResultMap 對每個字段都有自己的定義都有兩個類型 javaType可以不顯式寫出來,mybatis可以根據(jù)指定的實體類推斷出來 jdbcType 也就是對應到數(shù)據(jù)庫中的字段類型 mybatis完成數(shù)據(jù)庫的

    2024年02月04日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包