問題1、MaxCompute內建日期函數,DATEPART函數命令格式爲 bigint datepart(datetime date, string datepart)用於提取日期date中指定的時間單位datepart的值。DATETIME類型。若是輸入爲STRING類型會隱式轉換爲DATETIME類型後參與運算,其它類型拋異常。可是客戶在使用函數的時候沒有實現STRING類型隱式轉換爲DATETIME。報錯信息:FAILED:ODPS-0130121:[1,50] Invalid type STRING of argument 1 for function datepart, expect DATETIME。如何解決?
打開新類型odps.sql.type.system.odps2=true時某些隱式類型轉換會被禁用,包括STRING->BIGINT,STRING->DATETIME,DOUBLE->BIGINT,DECIMAL->DOUBLE,DECIMAL->BIGINT都是有精度損失或者報錯的風險。這種狀況能夠經過cast函數作強制轉換的方式來解決或者關掉新類型flag。
例如:select datepart(cast('2019-12-02 00:00:30' as datetime),'yyyy');
set odps.sql.type.system.odps2=falsehtml
問題二:MaxCompute中的數據通道Datahub 和 Tunnel 應用場景的區別是什麼?
Datahub是阿里雲上的實時消息隊列服務,與MaxCompute緊密集成。用戶能夠將實時數據寫入Datahub的topic,並經過Datahub的投遞策略,按期將數據投遞到MaxComptue表,知足實時數據準實時寫入MaxCompute的須要。
Tunnel 用於批量上傳數據到離線表裏,適用於離線計算的場景。
可參考文檔瞭解更多:https://help.aliyun.com/document_detail/51656.htmlsql
問題三:MaxCompute表如何設置自增序列?
可使用ROW_NUMBER函數去實現。例如:select ROW_NUMBER() OVER(),* from tablename;
可參考文檔:https://help.aliyun.com/document_detail/34994.htmljson
問題四:如何使用MaxCompute Java SDK設置SQL的Flag?
使用DataWorks或MaxCompute Console提交SQL時,一般須要設置SQL的Flag。若是須要使用MaxCompute新數據類型,經過Session級別方式開啓,則須要在涉及新數據類型的SQL前加Set Flag語句:set odps.sql.type.system.odps2=true;。 使用SDK提交SQL時,不能簡單地把Set Flag語句直接放到SQL Query中執行。以Java SDK爲例,設置Flag的正確方式以下。 // 構造SQLTask對象。SQLTask task = new SQLTask();task.setName("foobar");task.setQuery("select ...");// 設置flag。Map settings = new HashMap<>();settings.put("odps.sql.type.system.odps2", "true");... // 設置其它flags。task.setProperty("settings", new JSONObject(settings).toString()); // 這裏是關鍵:將flags對應的json string設置到settings property中。Instance instance = odps.instances().create(task); // 執行。函數
問題五:MaxCompute SQL中運行分區表全表掃描後,爲何會費用增長?
全表掃描費用增長是由於輸入量增長了,例若有一張表按時間(天)分區,存放了365個分區(365天)數據,全表掃描則輸入量爲365個分區的數據量,若是用分區裁剪只取某個分區(某天)數據,則輸入量就只有那個分區的數據量。阿里雲
問題六:MaxCompute中,select * from sale_detail order by region; 報錯:Semantic analysis exception-ORDER BY must be used with a LIMET clause
ORDER BY 必須與limit共同使用。ORDER BY沒有與limit共同使用時,報錯返回。
可參考文檔:https://help.aliyun.com/document_detail/73777.htmlhtm
問題七:在 MaxCompute 中,一張表的分區的數量是否越多越好?
在 MaxCompute 中,一張表最多容許有 60000 個分區,同時每一個分區的容量沒有上限。可是分區數量過多,會致使統計和分析過程很是不方便。
MaxCompute 也會限制單個做業中最多不能超過必定數量的 instance,而做業中的 instance 和您輸入的數據量和分區數量密切相關的。因此您須要根據業務須要,選擇合適的分區策略。對象
問題八:若是一開始並無分區字段,是否能夠增長或更改分區?
您不能夠在源表上直接增長或更改分區鍵,分區鍵一旦建立就不能更改。但您能夠從新建立一張分區表,使用動態分區SQL把源表數據導入到新分區表。
可參考文檔:https://help.aliyun.com/document_detail/73779.html隊列
問題九:如何查看MaxCompute數據量?
一、針對全表,查看物理空間,您可使用desc命令
二、若是要查看錶的數據條數,須要使用SQL。例如select count() as cnt from iris;文檔
問題十:在MaxCompute中,須要將一行轉化爲多行的時候,咱們該如何解決?
Lateral View和split,explode等UDTF一塊兒使用,它可以將一行數據拆成多行數據,並在此基礎上對拆分後的數據進行聚合。get
本文爲阿里雲內容,未經容許不得轉載。