MaxCompute目前提供了三種不同類型的資料類型版本,包括1.0資料類型、2.0資料類型以及Hive相容資料類型,您可以根據業務需求選擇合適的資料類型版本。本文為您介紹三種資料類型版本、選擇資料類型版本以及查看和修改專案的資料類型版本。
MaxCompute資料類型版本
MaxCompute設定資料類型版本屬性的參數共有3個:
odps.sql.type.system.odps2:MaxCompute 2.0資料類型版本的開關,屬性值為True或False。
odps.sql.decimal.odps2:MaxCompute 2.0的Decimal資料類型的開關,屬性值為True或False。
odps.sql.hive.compatible:MaxCompute Hive相容模式(即部分資料類型和SQL行為相容Hive)資料類型版本的開關,屬性值為True或False。
在新增專案時MaxCompute可以對3個版本的資料類型進行選擇,各個版本預設設定如下:
1.0資料類型版本
setproject odps.sql.type.system.odps2=false; --關閉MaxCompute 2.0資料類型。 setproject odps.sql.decimal.odps2=false; --關閉Decimal 2.0資料類型。 setproject odps.sql.hive.compatible=false; --關閉Hive相容模式。
適用於早期使用的MaxCompute專案,且該專案依賴的產品組件不支援2.0資料類型版本。
2.0資料類型版本
setproject odps.sql.type.system.odps2=true; --開啟MaxCompute 2.0資料類型。 setproject odps.sql.decimal.odps2=true; --開啟Decimal 2.0資料類型。 setproject odps.sql.hive.compatible=false; --關閉Hive相容模式。
適用於在2020年04月之前無存量資料的MaxCompute專案,且該專案依賴的產品組件支援2.0資料類型版本。
Hive相容資料類型
setproject odps.sql.type.system.odps2=true; --開啟MaxCompute 2.0資料類型。 setproject odps.sql.decimal.odps2=true; --開啟Decimal 2.0資料類型。 setproject odps.sql.hive.compatible=true; --開啟Hive相容模式。
適用於從Hadoop遷移的MaxCompute專案,且該專案依賴的產品組件支援2.0資料類型版本。
阿里雲其他產品或組件對資料類型的支援情況,請參見組件與資料類型的相容。
選擇資料類型版本
專案選擇的資料類型版本影響範圍如下:
表的資料類型。
DML語句、內建函數的行為。
與MaxCompute密切相關的開發組件。
因此,在選擇專案的資料類型版本前建議您瞭解各種版本的說明以及差異點,詳情請參見與其他資料類型版本的差異。
查看專案的資料類型版本
您可以在MaxCompute用戶端上執行如下命令,查看已經建立專案的屬性。
setproject;
查看odps.sql.type.system.odps2、odps.sql.decimal.odps2、odps.sql.hive.compatible屬性判斷當前專案的資料類型版本。
修改專案的資料類型版本
如果發現專案當前選擇的資料類型版本不能滿足業務需求,可以修改資料類型版本。
專案系統管理員(Project Owner)或超級管理員角色(Super_Administrator Role)可以在MaxCompute用戶端、使用DataWorks串連或MaxCompute Studio上執行如下命令,修改專案的資料類型版本。
在DataWorks資料開發的ODPS SQL節點中不能單獨執行如下SET類SQL,必須與SELECT或INSERT類SQL一起執行。
--查看專案資料類型版本。
setproject;
--開啟/關閉MaxCompute2.0資料類型版本。
setproject odps.sql.type.system.odps2=true/false;
--開啟/關閉decimal2.0資料類型。
setproject odps.sql.decimal.odps2=true/false;
--開啟/關閉hive相容模式資料類型版本。
setproject odps.sql.hive.compatible=true/false;
修改建議如下:
專案當前使用2.0資料類型版本,如果發現必須使用的組件不支援2.0資料類型。您可以使用如下方式解決與不支援2.0資料類型組件的對接問題:
將專案修改為1.0資料類型版本。
在與不支援2.0資料類型組件對接任務時,將Session設定為1.0資料類型版本。
說明將如下語句與Session中的命令一起提交,即可將該Session設定為1.0資料類型版本。該命令僅支援小寫。
set odps.sql.type.system.odps2=false;
專案使用2.0資料類型版本,部分SQL必須使用1.0資料類型,但是部分功能依賴2.0資料類型(例如current_timestamp函數)。解決方案如下:
將SQL拆分為單獨的Session,將Session設定為1.0資料類型版本。
將SQL改寫為可以替代的功能。
如果專案最開始使用了2.0資料類型版本,後面變更成1.0資料類型版本。需要注意以下2點:
對於已經使用了2.0資料類型的表,讀取資料時,TINYINT、SMALLINT、INT轉為BIGINT類型,CHAR、VARCHAR轉為STRING類型。
建立1.0資料類型的表,將2.0資料類型的表中資料通過CAST函數匯入1.0資料類型的表,即可將2.0資料類型的資料轉化為1.0資料類型。