對(duì)接MaxCompute常見(jiàn)問(wèn)題與診斷
本文為您介紹使用Hologres對(duì)接MaxCompute時(shí)的常見(jiàn)報(bào)錯(cuò)及解決方法。
基本概念
Hologres與MaxCompute的對(duì)比。
對(duì)比項(xiàng)
MaxCompute
Hologres
使用場(chǎng)景
ETL(Extract-Transform-Load)加工,面向數(shù)據(jù)明細(xì)層(DWD,Data Warehouse Detail)和數(shù)據(jù)服務(wù)層(DWS,Data WareHouse Service)。
交互式查詢、在線數(shù)據(jù)服務(wù),面向應(yīng)用的數(shù)據(jù)服務(wù)(ADS)。
用戶使用
異步的執(zhí)行作業(yè)。
同步的Query。
集群資源
共享大集群,SaaS模式。
獨(dú)享集群,PaaS模式。
計(jì)算引擎
基于Job Execution模型,將作業(yè)轉(zhuǎn)化為Stage,每個(gè)Stage按需申請(qǐng)計(jì)算資源,執(zhí)行過(guò)程中通過(guò)File持久化。
基于MPP模型,精細(xì)化內(nèi)存資源管理,執(zhí)行引擎常駐內(nèi)存,用戶態(tài)細(xì)粒度SQL算子調(diào)度,計(jì)算不落盤(pán)。
調(diào)度方式
進(jìn)程級(jí)別,運(yùn)行時(shí)按需申請(qǐng)、分配。
輕量級(jí)線程,資源啟動(dòng)時(shí)預(yù)留。
擴(kuò)展性
幾乎不受限制。
復(fù)雜查詢盡量避免跨多節(jié)點(diǎn)數(shù)據(jù)Shuffle。
存儲(chǔ)格式
列式。
行式、列式、行列共存。
存儲(chǔ)成本
基于Pangu,成本低。
基于Pangu,利用SSD做緩存加速,成本相對(duì)高。
接口標(biāo)準(zhǔn)
MaxCompute SQL,類(lèi)Hive。
PostgreSQL。
Hologres外部表和內(nèi)部表的適用場(chǎng)景
新建外部表直接加速查詢
外部表不存儲(chǔ)數(shù)據(jù),數(shù)據(jù)存儲(chǔ)在MaxCompute中,且外部表沒(méi)有索引,全靠CPU資源進(jìn)行計(jì)算,因此外部表比較適用于小數(shù)據(jù)量,低QPS(Queries-per-second)的查詢。
導(dǎo)入數(shù)據(jù)至Hologres內(nèi)部表進(jìn)行加速查詢
內(nèi)部表的數(shù)據(jù)存儲(chǔ)在Hologres中,當(dāng)有數(shù)據(jù)更新、復(fù)雜查詢、高QPS的查詢時(shí),建議導(dǎo)入內(nèi)部表,能充分發(fā)揮Hologres底層的性能優(yōu)勢(shì)。
性能調(diào)優(yōu)
性能退化:MaxCompute外部表發(fā)生Schema Evolution之后,查詢性能大幅下降
下降原因:Hologres加速查詢MaxCompute外部表默認(rèn)走HQE直讀鏈路,當(dāng)MaxCompute外部表結(jié)構(gòu)發(fā)生變更后,會(huì)回退到SQE鏈路,訪問(wèn)鏈路更長(zhǎng),導(dǎo)致查詢性能下降。
解決方法:通過(guò)hologres.hg_query_log來(lái)查詢慢Query。如果engine_type為SQE,可以確認(rèn)MaxCompute Schema Evolution鏈路切換為SQE導(dǎo)致性能下降。可以嘗試重新構(gòu)建需要進(jìn)行表結(jié)構(gòu)變更的MaxCompute外部表來(lái)解決該問(wèn)題。
常見(jiàn)報(bào)錯(cuò)
MaxCompute權(quán)限相關(guān):
查詢外部表報(bào)錯(cuò):You have NO privilege 'odps:Select' on xxx
查詢外部表報(bào)錯(cuò):The sensitive label of column 'xxx' is 2, but your effective label is 0
跨project訪問(wèn)MaxCompute表報(bào)錯(cuò):You have NO privilege 'odps:Select' on xxx
創(chuàng)建外部表報(bào)錯(cuò):You have NO privilege 'odps:List' on xxx
創(chuàng)建外部表時(shí)報(bào)錯(cuò):You don't exist in project xxx
其他報(bào)錯(cuò):
報(bào)錯(cuò):SERVER_INTERNAL_ERROR message: GetRecordBatch() is not implemented.
報(bào)錯(cuò):Build desc failed: Exceeds the scan limitation of 200 GB, current scan xxx GB.
報(bào)錯(cuò):query next from foreign table executor failed, Not implemented.
報(bào)錯(cuò):Open ORC file failed for schema mismatch. Reader schema:
報(bào)錯(cuò):failed to import foreign schema:Failed to get MaxCompute table:Not enable acid table.
報(bào)錯(cuò):Timestamp overflow detected while converting timestampfrom orc VectorBatch to arrow.
報(bào)錯(cuò):You have NO privilege 'MaxCompute:Select' on xxx.
報(bào)錯(cuò):The sensitive label of column 'xxx' is 2, but your effective label is 0.
報(bào)錯(cuò):query next from foreign table executor failed validate userinfao
報(bào)錯(cuò):SERVER_INTERNAL_ERROR message: GetRecordBatch() is not implemented.
查詢MaxCompute外表時(shí)報(bào)錯(cuò):query next from foreign table executor failed, GetRecordBatch() is not implemented
。
報(bào)錯(cuò)原因:當(dāng)前MaxCompute的表類(lèi)型不是Cfile類(lèi)型的表,Hologres暫不支持該類(lèi)型的表。
解決方法:在查詢數(shù)據(jù)SQL前添加如下GUC。
set hg_experimental_enable_access_odps_with_table_api =on;
報(bào)錯(cuò):ERROR: not an ORC file
查詢外部表時(shí)報(bào)錯(cuò):ERROR: status { code: SERVER_INTERNAL_ERROR message: "hos_exception: Invalid argument: ../../../src/OrcFileMetaHelper.cc(234)-<operator()>: not an ORC file
。
報(bào)錯(cuò)原因:MaxCompute的表是Stream表,數(shù)據(jù)是通過(guò)Tunnel等流式寫(xiě)入,當(dāng)前Hologres直讀MaxCompute外部表時(shí)暫不支持查詢?cè)摖顟B(tài)的表。
解決方法:在查詢數(shù)據(jù)SQL前添加如下GUC。
set hg_experimental_enable_access_odps_with_table_api=on; set hg_experimental_enable_access_odps_orc_via_holo =off;
報(bào)錯(cuò):specified partitions count in MaxCompute table: exceeds the limitation of 512, please add stricter partition filter or set axf_MaxCompute_partition_limit.或者Build desc failed: Exceeds the partition limitation of 512, current match xxx partitions.
報(bào)錯(cuò)原因:
當(dāng)前Hologres支持查詢最多分區(qū)數(shù)為512個(gè),查詢超過(guò)此限制。
解決方法:
請(qǐng)?zhí)砑臃謪^(qū)過(guò)濾條件,使一次查詢不超過(guò)512個(gè)分區(qū)。
請(qǐng)將數(shù)據(jù)導(dǎo)入Hologres內(nèi)部表,則沒(méi)有分區(qū)限制,詳情請(qǐng)參見(jiàn)使用SQL導(dǎo)入MaxCompute的數(shù)據(jù)至Hologres。
使用如下命令調(diào)整每次Query命中的分區(qū)數(shù),默認(rèn)為512,最大為1024,不建議調(diào)整太大,否則會(huì)影響查詢性能。
-- V1.1及以上版本 set hg_foreign_table_max_partition_limit = 128; -- V0.10版本 set hg_experimental_foreign_table_max_partition_limit = xxx ;
說(shuō)明如果MaxCompute配置了多級(jí)分區(qū),會(huì)按照最細(xì)粒度分區(qū)單位進(jìn)行分區(qū)命中計(jì)數(shù)。
報(bào)錯(cuò):Build desc failed: Exceeds the scan limitation of 200 GB, current scan xxx GB.
報(bào)錯(cuò)原因:
Hologres中默認(rèn)最大的底層數(shù)據(jù)掃描量為200GB,此數(shù)據(jù)量是命中MaxCompute分區(qū)之后的掃描數(shù)據(jù)量,和MaxCompute自身存儲(chǔ)數(shù)據(jù)量無(wú)關(guān),查詢超出此限制導(dǎo)致報(bào)錯(cuò)。
解決方法:
增加過(guò)濾條件,命中更少的分區(qū),使一次Query的掃描數(shù)據(jù)量在200GB以內(nèi)。
請(qǐng)將MaxCompute表數(shù)據(jù)導(dǎo)入至Hologres中,再進(jìn)行查詢,詳情請(qǐng)參見(jiàn)使用SQL導(dǎo)入MaxCompute的數(shù)據(jù)至Hologres。
(不推薦)使用
set hg_experimental_foreign_table_max_scan_size = xxx;
命令設(shè)置參數(shù)調(diào)大數(shù)據(jù)量限制(其中xxx可以替換為業(yè)務(wù)的數(shù)據(jù)量,如400,單位為GB)。但是過(guò)分調(diào)大外部表數(shù)據(jù)量限制,可能無(wú)法得到預(yù)期的性能,也可能造成實(shí)例OOM(Out Of Memory),影響正常使用。
報(bào)錯(cuò):query next from foreign table executor failed, Not implemented.
報(bào)錯(cuò)原因:MaxCompute表數(shù)據(jù)寫(xiě)入時(shí)使用Streaming Tunnel的方式寫(xiě)入,寫(xiě)入命令為
tunnel.createStreamUploadSession
。Hologres讀取數(shù)據(jù)時(shí)需要開(kāi)啟兩個(gè)GUC。解決方法:
添加如下兩個(gè)配置項(xiàng)。
說(shuō)明僅Hologres V1.3及以上版本支持該GUC。
set hg_experimental_enable_access_odps_with_table_api=on; set hg_experimental_enable_access_odps_orc_via_holo =off;
如果實(shí)例版本低于V1.3版本,建議在MaxCompute側(cè)停止streaming寫(xiě)入,然后通過(guò)以下語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行Merge:
set odps.merge.task.mode=sql; set odps.merge.lock.expire.time=0; ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;
報(bào)錯(cuò):Build desc failed: failed to check permission: Currently not supported table type "view".
報(bào)錯(cuò)原因:目前暫時(shí)不支持MaxCompute的View。
報(bào)錯(cuò):Build desc failed: failed to get foreign table split:MaxCompute-0010000: System internal error - get input pangu dir meta fai.
報(bào)錯(cuò)原因:
Hologres讀取MaxCompute的配置未及時(shí)更新。
解決方法:
請(qǐng)過(guò)幾分鐘重試,若是重試好幾次都未成功,請(qǐng)聯(lián)系技術(shù)支持處理。
報(bào)錯(cuò):ERROR: Query:[xxx] Build desc failed: failed to get foreign table split:ERPC_ERROR_CONNECTION_CLOSED.
報(bào)錯(cuò)原因:
MaxCompute小文件過(guò)多,導(dǎo)致請(qǐng)求的META超過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議(RPC,Remote Procedure Call Protocol)1GB的最大限制。
解決方法:
請(qǐng)執(zhí)行以下命令進(jìn)行小文件合并。
set MaxCompute.merge.task.mode=sql; set MaxCompute.merge.lock.expire.time=0; ALTER TABLE <tablename> [PARTITION] MERGE SMALLFILES;
HologresV0.10.21及以上版本已優(yōu)化,請(qǐng)升級(jí)Hologres實(shí)例,詳情請(qǐng)參見(jiàn)實(shí)例升級(jí)。
請(qǐng)聯(lián)系MaxCompute技術(shù)支持從源頭解決,如果數(shù)據(jù)量不大可直接將數(shù)據(jù)寫(xiě)入Hologres。
報(bào)錯(cuò):ERROR: status { code: SERVER_INTERNAL_ERROR message: "hos_exception: IO error: Failed to execute pangu open normal file, err: PanguParameterInvalidException" }.
報(bào)錯(cuò)原因:
Hologres HQE不支持直讀MaxCompute Pangu加密數(shù)據(jù)。
解決方法:
請(qǐng)執(zhí)行
ALTER DATABASE <dbname> SET hg_experimental_enable_access_odps_orc_via_holo = false;
命令將外部表的執(zhí)行引擎修改為SQE,使用SQE訪問(wèn)MaxCompute加密數(shù)據(jù),該配置是數(shù)據(jù)庫(kù)級(jí)別配置,需要重新創(chuàng)建連接才能生效;您也可執(zhí)行Session級(jí)別設(shè)置:SET hg_experimental_enable_access_odps_orc_via_holo = false;
。
報(bào)錯(cuò):failed to import foreign schema:Failed to get MaxCompute table:Not enable schema evolution.
報(bào)錯(cuò)原因:
對(duì)MaxCompute表的元數(shù)據(jù)做了修改。
解決方法:
請(qǐng)升級(jí)Hologres實(shí)例版本至V1.3及以上版本,通過(guò)加入實(shí)時(shí)數(shù)倉(cāng)Hologres交流群申請(qǐng)升級(jí)實(shí)例或自助升級(jí),加群方式請(qǐng)參見(jiàn)如何獲取更多的在線支持?。
更新了MaxCompute外部表Schema之后(例如增加列、刪除列操作),請(qǐng)執(zhí)行IMPORT FOREIGN SCHEMA來(lái)做刷新。
如果執(zhí)行了
IMPORT FOREIGN SCHEMA
還報(bào)錯(cuò)的話,請(qǐng)重新建一次MaxCompute的表,再建外部表,因?yàn)镸axCompute修改Schema之后進(jìn)入到schema evolution
狀態(tài),Hologres無(wú)法讀取這種狀態(tài)的表。
報(bào)錯(cuò):Open ORC file failed for schema mismatch. Reader schema:
報(bào)錯(cuò)原因:
MaxCompute的表為ORC格式,表的DECIMAL類(lèi)型存儲(chǔ)方式改變(一般是MaxCompute新加了DECIMAL字段或者M(jìn)axCompute做了灰度配置變更),導(dǎo)致Hologres讀MaxCompute的DECIMAL類(lèi)型出錯(cuò)。
解決方法:
請(qǐng)執(zhí)行
set MaxCompute.storage.orc.enable.binary.decimal=false
命令,重新導(dǎo)下MaxCompute數(shù)據(jù)。請(qǐng)將MaxCompute的表的DECIMAL類(lèi)型改為DOUBLE類(lèi)型,再重新刷新一遍數(shù)據(jù)。
報(bào)錯(cuò):failed to import foreign schema:Failed to get MaxCompute table:Not enable acid table.
報(bào)錯(cuò)原因:
MaxCompute表是事務(wù)(Transactional)表。
解決方法:
當(dāng)前不支持MaxCompute的Transactional表,建議改為普通表。
報(bào)錯(cuò):Request denied, may caused by server busy.
報(bào)錯(cuò)原因:
外部表資源占滿,CPU用量嚴(yán)重超出。
解決方法:
請(qǐng)優(yōu)化SQL,使SQL更加充分合理地使用資源,詳情請(qǐng)參見(jiàn)優(yōu)化MaxCompute外部表的查詢性能。
降低并發(fā)度。
使用
show hg_foreign_table_executor_max_dop;
命令查看當(dāng)前配置。使用如下命令降低并發(fā)度,推薦調(diào)整為當(dāng)前配置的一半。
-- 語(yǔ)法示例 set hg_foreign_table_executor_max_dop = <并發(fā)數(shù)>; -- 使用示例 set hg_foreign_table_executor_max_dop = 18;
并發(fā)數(shù):外部表單個(gè)執(zhí)行節(jié)點(diǎn)讀取外部表數(shù)據(jù)的并發(fā)度,默認(rèn)值為256,取值范圍為0-1024。修改后的風(fēng)險(xiǎn): 并發(fā)度太大可能造成實(shí)例OOM,導(dǎo)致導(dǎo)入、查詢失敗,甚至實(shí)例重啟,以至于服務(wù)不可用。并發(fā)度太小會(huì)導(dǎo)致外表查詢、外表導(dǎo)入內(nèi)表性能較差。
請(qǐng)導(dǎo)入數(shù)據(jù)至Hologres內(nèi)部表,內(nèi)部表可以設(shè)置索引,使查詢性能更好,詳情請(qǐng)參見(jiàn)使用SQL導(dǎo)入MaxCompute的數(shù)據(jù)至Hologres。
導(dǎo)入數(shù)據(jù)報(bào)錯(cuò):Query executor exceeded total memory limitation xxxxx: yyyy bytes used.
報(bào)錯(cuò)原因:
數(shù)據(jù)量太大或者導(dǎo)入邏輯太復(fù)雜,導(dǎo)致超出了內(nèi)存限制。(實(shí)例由多個(gè)節(jié)點(diǎn)組成,一個(gè)節(jié)點(diǎn)標(biāo)準(zhǔn)的內(nèi)存上限是64GB,節(jié)點(diǎn)內(nèi)存會(huì)分為三部分,三分之一用于計(jì)算,三分之一用于緩存,三分之一用于元數(shù)據(jù)。這里的報(bào)錯(cuò)是計(jì)算內(nèi)存超出了限制。)
解決方法:
查看執(zhí)行計(jì)劃
可以執(zhí)行
explain analyze sql;
命令查看執(zhí)行計(jì)劃中具體的數(shù)據(jù)行數(shù)。當(dāng)導(dǎo)入Query包含查詢,但部分表沒(méi)有analyze
,或者analyze
過(guò),但數(shù)據(jù)又有更新導(dǎo)致不準(zhǔn)確,導(dǎo)致查詢優(yōu)化器決策連接順序有誤,會(huì)引起內(nèi)存開(kāi)銷(xiāo)過(guò)高。對(duì)所有參與的內(nèi)表、外表執(zhí)行
analyze tablename;
命令,更新表的統(tǒng)計(jì)元信息,可以幫助查詢優(yōu)化器生成更優(yōu)的執(zhí)行計(jì)劃。設(shè)置單行導(dǎo)入條數(shù)
當(dāng)表的列數(shù)較多,單行數(shù)據(jù)量較大時(shí),單次讀取的數(shù)據(jù)量會(huì)更大,通過(guò)在SQL前加以下參數(shù)來(lái)控制單次讀取數(shù)據(jù)的行數(shù),可以有效減少OOM情況。
set hg_experimental_query_batch_size = 1024; -- 默認(rèn)值為8192 insert into holo_table select * from mc_table;
降低導(dǎo)入的并發(fā)度。
降低導(dǎo)入并發(fā)度,也會(huì)有效減少導(dǎo)入過(guò)程中的內(nèi)存開(kāi)銷(xiāo),并發(fā)度通過(guò)參數(shù)
hg_foreign_table_executor_max_dop
控制,默認(rèn)為實(shí)例的Core數(shù),可以在導(dǎo)入時(shí)設(shè)置更小的參數(shù),降低導(dǎo)入的內(nèi)存使用。set hg_foreign_table_executor_max_dop = 8; insert into holo_table select * from mc_table;
排查外表重復(fù)數(shù)據(jù)是否過(guò)多。
如果以上操作都做完了,還是導(dǎo)入不了,如果使用的是
insert on conflict
命令,請(qǐng)排查是否外表重復(fù)數(shù)據(jù)太多,重復(fù)數(shù)據(jù)太多也會(huì)導(dǎo)致導(dǎo)入性能不好,可以在MaxCompute做重復(fù)數(shù)據(jù)去重,再進(jìn)行導(dǎo)入,詳情請(qǐng)參見(jiàn)多行數(shù)據(jù)合并為一行數(shù)據(jù)。升級(jí)新版本動(dòng)態(tài)調(diào)整內(nèi)存。
Hologres從V1.1.24版本開(kāi)始,會(huì)對(duì)內(nèi)存進(jìn)行動(dòng)態(tài)調(diào)整,后臺(tái)會(huì)實(shí)時(shí)刷新當(dāng)前內(nèi)存水位,若是有空閑,則會(huì)分配更多內(nèi)存給計(jì)算使用,請(qǐng)升級(jí)Hologres至最新版本,具體操作請(qǐng)參見(jiàn)實(shí)例升級(jí)。
擴(kuò)容。
如果以上操作都做完了,導(dǎo)入數(shù)據(jù)還是不成功,請(qǐng)對(duì)Hologres擴(kuò)容,詳情請(qǐng)參見(jiàn)升配。
報(bào)錯(cuò):Timestamp overflow detected while converting timestampfrom orc VectorBatch to arrow.
報(bào)錯(cuò)原因:
在MaxCompute表中有TIMESTAMP類(lèi)型,使用Tunnel寫(xiě)入后TIMESTAMP精度會(huì)變成納秒,目前Hologres暫不支持精度為納秒的TIMESTAMP。
解決方法:
在MaxCompute中將TIMESTAMP類(lèi)型轉(zhuǎn)換為DateTime類(lèi)型。
Hologres實(shí)例升級(jí)版本到 V1.1.70及以上版本。
報(bào)錯(cuò):You have NO privilege 'MaxCompute:Select' on xxx.
報(bào)錯(cuò)原因:
當(dāng)前賬號(hào)不具備MaxCompute表的查詢(Select)權(quán)限。
解決方法:
請(qǐng)聯(lián)系MaxCompute管理員在MaxCompute中授予當(dāng)前賬號(hào)查詢表(Select)的權(quán)限,具體操作請(qǐng)參見(jiàn)MaxCompute權(quán)限。
報(bào)錯(cuò):The sensitive label of column 'xxx' is 2, but your effective label is 0.
報(bào)錯(cuò)原因:
當(dāng)前賬號(hào)只有MaxCompute表的部分字段權(quán)限。
解決方法:
核對(duì)有權(quán)限的賬號(hào)和報(bào)錯(cuò)的賬號(hào)是否為同一個(gè)賬號(hào),若確實(shí)沒(méi)有權(quán)限,可以去申請(qǐng)MaxCompute的權(quán)限,或者只過(guò)濾有權(quán)限的字段查詢。獲取MaxCompute表全部字段的權(quán)限,具體操作請(qǐng)參見(jiàn)授權(quán)。
若是有權(quán)限,并且也只查詢了有權(quán)限的字段,在實(shí)例比較老的版本可能存在缺陷,您可以在執(zhí)行的Query前增加如下命令解決報(bào)錯(cuò)問(wèn)題。
set hg_experimental_enable_MaxCompute_executor=on; set hg_experimental_enable_query_master=on;
報(bào)錯(cuò):query next from foreign table executor failed validate userinfao
報(bào)錯(cuò)原因:
未正確對(duì)Hologres的AliyunHologresEncryptionDefaultRole進(jìn)行授權(quán),或者因?yàn)榫彺娴脑颍跈?quán)未超過(guò)3小時(shí)也可能偶發(fā)出現(xiàn)此報(bào)錯(cuò)。
解決方法:
對(duì)賬號(hào)授權(quán)AliyunHologresEncryptionDefaultRolePolicy角色,詳情請(qǐng)參見(jiàn)查詢MaxCompute加密數(shù)據(jù)(BYOK模式)。
查詢外部表速度慢如何解決?
建議優(yōu)化SQL,詳情請(qǐng)參見(jiàn)優(yōu)化MaxCompute外部表的查詢性能。
查詢外部表報(bào)錯(cuò):You have NO privilege 'odps:Select' on xxx
問(wèn)題現(xiàn)象
當(dāng)您在Hologres管理控制臺(tái)創(chuàng)建外部表之后,查詢外部表時(shí)報(bào)錯(cuò)提示“You have NO privilege 'odps:Select' on xxx”。
問(wèn)題原因
當(dāng)前賬號(hào)不具備MaxCompute表的查詢(Select)權(quán)限。
解決方法
需要MaxCompute管理員在MaxCompute中授予當(dāng)前賬號(hào)查詢表(Select)的權(quán)限,具體操作請(qǐng)參見(jiàn)MaxCompute權(quán)限。
查詢外部表報(bào)錯(cuò):The sensitive label of column 'xxx' is 2, but your effective label is 0
問(wèn)題現(xiàn)象
當(dāng)您在Hologres管理控制臺(tái)創(chuàng)建外部表之后,查詢外部表時(shí)報(bào)錯(cuò)提示“The sensitive label of column 'xxx' is 2, but your effective label is 0”。
問(wèn)題原因
當(dāng)前賬號(hào)只有MaxCompute表的部分字段權(quán)限。
解決方法
您可以選擇如下三種方法中的一種來(lái)解決該問(wèn)題:
(推薦)建議您搜索加入實(shí)時(shí)數(shù)倉(cāng)Hologres交流群申請(qǐng)將當(dāng)前實(shí)例版本升級(jí)至V0.8,詳情請(qǐng)參見(jiàn)如何獲取更多的在線支持?。
您可以在執(zhí)行的Query前增加如下參數(shù)解決報(bào)錯(cuò)問(wèn)題。
set hg_experimental_enable_odps_executor=on; set hg_experimental_enable_query_master=on;
獲取MaxCompute表全部字段的權(quán)限,具體操作請(qǐng)參見(jiàn)MaxCompute權(quán)限。
跨project訪問(wèn)MaxCompute表報(bào)錯(cuò):You have NO privilege 'odps:Select' on xxx
問(wèn)題現(xiàn)象
當(dāng)前賬號(hào)已經(jīng)具備MaxCompute表查詢權(quán)限,但是跨project訪問(wèn)MaxCompute表報(bào)錯(cuò)”You have NO privilege 'odps:Select' on xxx“。
問(wèn)題原因
若是當(dāng)前賬號(hào)已經(jīng)具備MaxCompute已經(jīng)有表的查詢權(quán)限,跨project訪問(wèn)MaxCompute表還是報(bào)錯(cuò),則MaxCompute當(dāng)前可能采用的是package授權(quán),您需要添加SQL語(yǔ)句解決該問(wèn)題。
解決方法
當(dāng)前如果MaxCompute是project授權(quán)方式,在Hologres中,您可以在SQL前添加如下參數(shù)解決。
// V0.7版本的實(shí)例請(qǐng)執(zhí)行以下語(yǔ)句授權(quán) set seahawks.seahawks_internal_current_odps_project='holoprojectname'; //V0.8版本的實(shí)例請(qǐng)執(zhí)行以下語(yǔ)句授權(quán) set hg_experimental_odps_current_project_name = 'holoprojectname';
創(chuàng)建外部表報(bào)錯(cuò):You have NO privilege 'odps:List' on xxx
問(wèn)題現(xiàn)象
當(dāng)您在Hologres管理控制臺(tái)使用HoloWeb或DataStudio可視化創(chuàng)建外部表時(shí)報(bào)錯(cuò)提示“You have NO privilege 'odps:List' on xxx”。
問(wèn)題原因
當(dāng)前賬號(hào)在MaxCompute中不具備查看所有表(List)的權(quán)限。
解決方法
需要MaxCompute管理員在MaxCompute中授予當(dāng)前賬號(hào)查看所有表(List)的權(quán)限,具體操作請(qǐng)參見(jiàn)MaxCompute權(quán)限。
使用SQL語(yǔ)句創(chuàng)建外部表查詢數(shù)據(jù),具體操作請(qǐng)參見(jiàn)通過(guò)創(chuàng)建外部表加速查詢MaxCompute數(shù)據(jù)。
創(chuàng)建外部表時(shí)報(bào)錯(cuò):Access denied by project ip white list: sourceIP:'xxxx' is not in white list. project: xxxx
問(wèn)題現(xiàn)象
當(dāng)您在Hologres管理控制臺(tái)使用HoloWeb創(chuàng)建外部表時(shí)報(bào)錯(cuò)提示“Access denied by project ip white list: sourceIP:'xxxx' is not in white list. project: xxxx”。
問(wèn)題原因
當(dāng)前MaxCompute集群設(shè)置了白名單訪問(wèn),Holoweb不在白名單內(nèi)。
解決方法
當(dāng)MaxCompute項(xiàng)目開(kāi)啟白名單功能時(shí),僅允許白名單內(nèi)的設(shè)備訪問(wèn)項(xiàng)目空間;非白名單內(nèi)的設(shè)備訪問(wèn)項(xiàng)目空間時(shí),即使擁有正確的AccessKey ID及AccessKey Secret,也無(wú)法通過(guò)鑒權(quán)。因此需要將報(bào)錯(cuò)信息中的IP設(shè)置為白名單才可以創(chuàng)建外表,具體操作請(qǐng)參見(jiàn)管理IP白名單。
創(chuàng)建外部表時(shí)報(bào)錯(cuò):You don't exist in project xxx
問(wèn)題現(xiàn)象
當(dāng)您在創(chuàng)建外部表時(shí)報(bào)錯(cuò)提示“You don't exist in project xxx”。
問(wèn)題原因
執(zhí)行創(chuàng)建外部表的賬號(hào)不具有訪問(wèn)對(duì)應(yīng)MaxCompute Project的權(quán)限。
解決方法
請(qǐng)先確認(rèn)需要訪問(wèn)的MaxCompute Project名稱,如果Project名稱錯(cuò)誤請(qǐng)先換成正確的Project名。如果Project名稱正確仍然報(bào)同樣的錯(cuò)誤,需要前往MaxCompute中給報(bào)錯(cuò)的賬號(hào)授權(quán),詳情請(qǐng)參見(jiàn)權(quán)限概述。