日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

ODPS-0130071

本文為您介紹錯誤碼ODPS-0130071:Semantic analysis exception的報錯場景,并提供對應的解決方案。

錯誤1:the number of input partition columns (n) doesn't equal to table's partition columns (m)

錯誤信息示例

FAILED: ODPS-0130071:[m,n] Semantic analysis exception - the number of input partition columns (n) doesn't equal to table's partition columns (m)

錯誤描述

數據插入表是一個分區表,其中有m個分區字段,但是插入數據SQL里只有n個分區列,導致數據寫入找不到分區報錯

解決方案

建議修改插入數據SQL,對齊分區字段。

示例

--創建表
CREATE TABLE if NOT EXISTS mf_sale_detail
(
  shop_name     STRING,
  customer_id   STRING,
  total_price   DOUBLE
)
partitioned BY
(
  sale_date string,
  region    string
);

--錯誤:目標表有2級分區,partition子句只指定了部分或完全沒指定
INSERT overwrite TABLE mf_sale_detail 
    VALUES ('s1','c1',100.1),('s2','c2',100.2),('s3','c3',100.3);
FAILED: ODPS-0130071:[1,24] Semantic analysis exception - the number of input partition columns (0) doesn't equal to table's partition columns (2)

--正確:partition子句指定完整分區
INSERT overwrite TABLE mf_sale_detail PARTITION(sale_date = '2013', region = 'china')
    VALUES ('s1', 'c1', 100.1), ('s2', 'c2', 100.2), ('s3', 'c3', 100.3);
OK

--正確:使用動態分區
INSERT overwrite TABLE mf_sale_detail PARTITION(sale_date = '2013', region)
    VALUES ('s1', 'c1', 100.1, 'china'), ('s2', 'c2', 100.2, 'china'), ('s3', 'c3', 100.3, 'china');
OK

錯誤2:expect equality expression (i.e., only use '=' and 'AND') for join condition without mapjoin hint

錯誤信息示例

ODPS-0130071:[m,n] Semantic analysis exception - expect equality expression (i.e., only use '=' and 'AND') for join condition without mapjoin hint

錯誤描述

MaxCompute SQL模式使用Sort-Merge JOIN作為JOIN的物理算法,需要JOIN condition包括等值表達式;實際Query執行會按照等值表達式中左右表涉及的列做Shuffle。

解決方案

  • 保證Join condition包含等值表達式。

  • 增加mapjoin hint。

    說明

    ON條件只包含非等值表達式,可能會導致JOIN膨脹出特別多的數據,執行緩慢。

示例

--錯誤:join condition只包含非等值表達式
SELECT t1. *
FROM src t1
JOIN src t2
ON t1.value > t2.value;

FAILED: ODPS-0130071:[4,4] Semantic analysis exception - expect equality expression (i.e., only use '=' and 'AND') for join condition without mapjoin hint

--正確:join condition包含有左右兩表列的等值表達式(t1.key = t2.key)
SELECT t1. *
FROM src t1
JOIN src t2
ON t1.key = t2.key AND t1.value > t2.value;

--正確:增加mapjoin hint
SELECT /*+mapjoin(t1)*/ t1. *
FROM src t1
JOIN src t2
ON t1.value > t2.value;

錯誤3:insert into HASH CLUSTERED table/partition xxx is not current supported

錯誤信息

ODPS-0130071:[m,n] Semantic analysis exception - insert into HASH CLUSTERED table/partition xxx is not current supported

錯誤碼描述

目前不支持用INSERT INTO語句往聚簇表里寫數據。

解決方案

  • 建議修改成普通表

  • 修改語句為INSERT OVERWRITE。

示例

--聚簇表建表
CREATE TABLE sale_detail_hashcluster
(
  shop_name   STRING,
  total_price decimal,
  customer_id BIGINT
)
clustered BY(customer_id)
sorted BY(customer_id)
INTO 1024 buckets;

--錯誤:insert into cluster表
INSERT INTO sale_detail_hashcluster
VALUES ('a', 123, 'id123');

FAILED: ODPS-0130071:[1,13] Semantic analysis exception - insert into HASH CLUSTERED table/partition meta.sale_detail_hashcluster is not current supported

--正確:insert into普通表
CREATE TABLE sale_detail
(
  shop_name   STRING,
  total_price decimal,
  customer_id BIGINT
);

INSERT INTO sale_detail
VALUES ('a', 123, 'id123');

--正確:修改為insert overwrite cluster表
INSERT overwrite TABLE sale_detail_hashcluster
VALUES ('a', 123, 'id123');

錯誤4:should appear in GROUP BY key

錯誤信息示例

ODPS-0130071:[m,n] Semantic analysis exception - column reference xx.yy should appear in GROUP BY key

問題描述

GROUP BY語句按照指定的key對輸入表進行聚合,經過聚合之后:

  1. 對于聚合key對應的列,可以直接輸出它們的值,也可以調用普通函數(非聚合函數)對它們進行進一步加工和計算。

  2. 對于非聚合key對應的列,必須調用聚合函數(例如sum/count/avg等)來計算聚合結果,而不能直接輸出它們的值。

解決方案

對于非聚合key對應的列,必須要調用聚合函數(例如sum/count/avg/any_value等)來計算聚合結果。

Query示例

--錯誤,列c不是group by的key,沒有使用聚合函數
SELECT a, sum(b), c
FROM VALUES (1L, 2L, 3L) AS t(a, b, c)
GROUP BY a;

--報錯
FAILED: ODPS-0130071:[1,19] Semantic analysis exception - column reference t.c should appear in GROUP BY key

--正確,使用聚合函數any_value來計算列c的聚合值
SELECT a, sum(b), any_value(c)
FROM VALUES (1L, 2L, 3L) AS t(a, b, c)
GROUP BY a;

錯誤5:Invalid partition value

錯誤信息示例

ODPS-0130071:[m,n] Semantic analysis exception - Invalid partition value: 'xxx'

問題描述

分區字段的取值非法。MaxCompute的分區字段取值規則如下。

  • 分區值不能包含雙字節字符(如中文),必須以字母開頭,包含字母、數字和允許的字符,長度不超過128字節。

  • 允許的字符包括空格、冒號(:)、下劃線(_)、美元符號($)、井號(#)、英文句點(.)、感嘆號(!)和at(@),其他字符的行為未定義,例如轉義字符\t\n/

解決方案

修改分區字段的取值,修改為合法值。

Query示例

--創建table
CREATE TABLE mc_test
(
  a bigint
)
partitioned BY
(
  ds string
);

--錯誤,分區值'${today}'非法
ALTER TABLE mc_test ADD PARTITION(ds = '${today}');

--報錯
FAILED: ODPS-0130071:[1,40] Semantic analysis exception - Invalid partition value: '${today}'

--正確,修改分區值為合法值'20221206'
ALTER TABLE mc_test ADD PARTITION(ds='20221206');

錯誤6:only oss external table support msck repair syntax

錯誤信息示例

ODPS-0130071:[m,n] Semantic analysis exception - only oss external table support msck repair syntax

問題描述

只有OSS外部表才支持msck repair操作,參考文檔補全OSS外部表分區數據語法

  • 方式一(推薦):自動解析OSS目錄結構,識別分區,為OSS外部表添加分區信息。

    通過這種方式,MaxCompute會根據您創建OSS外部表時指定的分區目錄,自動補全OSS外部表的分區,而不用逐個按照分區列名和名稱增加,這適用于一次性補全全部缺失的歷史分區的場景,

    msck repair TABLE <mc_oss_extable_name> ADD partitions [ WITH properties (key:VALUE, key: VALUE ...)];
    說明

    該方式不適用于處理增量數據的補充,尤其是在OSS目錄包含大量分區(如超過1000個)的情況下。由于當新增分區遠少于已有分區時,頻繁使用msck命令會導致對OSS目錄大量的重復掃描和元數據更新請求,這將顯著降低命令執行的效率。因此,對于需要更新增量分區的場景,建議您采用方式二。

  • 方式二:手動執行如下命令為OSS外部表添加分區信息。

    當歷史分區已經創建完成,需要頻繁地周期性追加分區,建議采用該方式,在執行數據寫入任務之前提前創建好分區。分區創建完成后,即使OSS上有新數據寫入,也無需刷新對應分區,外部表即可讀取OSS目錄上的最新數據。

    ALTER TABLE < mc_oss_extable_name >
        ADD PARTITION (< col_name >= < col_value >)[
    ADD PARTITION (< col_name >= < col_value >)...][location URL];

    col_namecol_value的值需要與分區數據文件所在目錄名稱對齊。假設,分區數據文件所在的OSS目錄結構如下圖,col_name對應directioncol_value對應N、NE、S、SW、W。一個add partition對應一個子目錄,多個OSS子目錄需要使用多個add partition分區路徑

  • 示例

    1. 在OSS上創建目錄demo8并分別在下面建立兩個分區文件夾,分別放入對應的文件。

      • 分區文件夾:$pt1=1/$pt2=2,文件名稱:demo8-pt1.txt分區文件pt1

      • 分區文件夾:$pt1=3/$pt2=4,文件名稱:demo8-pt2.txt分區文件pt2

    2. 創建外部表并指定pt字段。

      --創建外部表
      create external table mf_oss_spe_pt (id int, name string)
      partitioned by (pt1 string, pt2 string)
      stored as TEXTFILE
      location "oss://oss-cn-beijing-internal.aliyuncs.com/mfoss*******/demo8/";
      
      --指定分區字段
      MSCK REPAIR TABLE  mf_oss_spe_pt ADD PARTITIONS
      with PROPERTIES ('odps.msck.partition.column.mapping'='pt1:$pt1,pt2:$pt2');
      
      --查詢數據
      select * from mf_oss_spe_pt where pt1=1 and pt2=2;
      --返回
      +------------+------------+------------+------------+
      | id         | name       | pt1        | pt2        |
      +------------+------------+------------+------------+
      | 1          | kyle       | 1          | 2          |
      | 2          | nicole     | 1          | 2          |
      +------------+------------+------------+------------+
      --查詢數據
      select * from mf_oss_spe_pt where pt1=3 and pt2=4;
      +------------+------------+------------+------------+
      | id         | name       | pt1        | pt2        |
      +------------+------------+------------+------------+
      | 3          | john       | 3          | 4          |
      | 4          | lily       | 3          | 4          |
      +------------+------------+------------+------------+
      
                                      
    3. 當OSS外表中的分區列名與OSS的目錄結構不一致時,需要指定目錄。

      --MaxCompute分區與OSS的目錄對應如下:
      --pt1=8-->8
      --pt2=8-->$pt2=8
      --添加分區
      alter table mf_oss_spe_pt add partition (pt1=8,pt2=8)
            location 'oss://oss-cn-beijing-internal.aliyuncs.com/mfosscostfee/demo8/8/$pt2=8/';
      --需要關閉commit mode
      --插入數據
      set odps.sql.unstructured.oss.commit.mode=false;
      insert into mf_oss_spe_pt partition (pt1=8,pt2=8) values (1,'tere');
      --查詢數據
      set odps.sql.unstructured.oss.commit.mode=false;
      select * from mf_oss_spe_pt where pt1=8 and pt2=8;
      +------+------+-----+-----+
      | id   | name | pt1 | pt2 |
      +------+------+-----+-----+
      | 1    | tere | 8   | 8   |
      +------+------+-----+-----+
                                      

解決方案

按照文檔的描述,創建OSS外部表,才能執行MSCK REPAIR命令。

Query示例

--創建普通表
CREATE TABLE mc_test
(
  a BIGINT
)
partitioned BY
(
  ds string
);

--錯誤,普通表不能執行msck repair操作。
msck TABLE mc_test ADD partitions;

FAILED: ODPS-0130071:[1,12] Semantic analysis exception - only oss external table support msck repair syntax

錯誤7:column xx in source has incompatible type yy with destination column zz, which has type ttt

錯誤信息示例

ODPS-0130071:[m,n] Semantic analysis exception - column xx in source has incompatible type yy with destination column zz, which has type ttt

問題描述

向表中插入數據的時候,要求目標表的數據類型和插入數據的數據類型相匹配,或者是插入的數據可以隱式轉換為目標表的數據類型,否則就會報錯。

解決方案

修改Query,使得插入數據的類型和目標表的數據類型相匹配。

Query示例

--創建表
odps> CREATE TABLE mc_test
(
  a datetime
);

--錯誤,數據類型不匹配
odps> INSERT overwrite TABLE mc_test
VALUES (1L);

FAILED: ODPS-0130071:[2,9] Semantic analysis exception - column __value_col0 in source has incompatible type BIGINT with destination column a, which has type DATETIME

--正確,插入正確類型的數據
odps> INSERT overwrite TABLE mc_test
VALUES (datetime '2022-12-06 14:23:45');

錯誤8:function datediff cannot match any overloaded functions with (STRING, STRING, STRING), candidates are BIGINT DATEDIFF(DATE arg0, DATE arg1, STRING arg2); BIGINT DATEDIFF(DATETIME arg0, DATETIME arg1, STRING arg2); BIGINT DATEDIFF(TIMESTAMP arg0, TIMESTAMP arg1, STRING arg2); INT DATEDIFF(DATE arg0, DATE arg1); INT DATEDIFF(STRING arg0, STRING arg1); INT DATEDIFF(TIMESTAMP arg0, TIMESTAMP arg1)

錯誤信息示例

ODPS-0130071:[m,n] Semantic analysis exception - function datediff cannot match any overloaded functions with (STRING, STRING, STRING), candidates are BIGINT DATEDIFF(DATE arg0, DATE arg1, STRING arg2); BIGINT DATEDIFF(DATETIME arg0, DATETIME arg1, STRING arg2); BIGINT DATEDIFF(TIMESTAMP arg0, TIMESTAMP arg1, STRING arg2); INT DATEDIFF(DATE arg0, DATE arg1); INT DATEDIFF(STRING arg0, STRING arg1); INT DATEDIFF(TIMESTAMP arg0, TIMESTAMP arg1)

錯誤描述

使用的函數DATEDIFF入參類型不匹配,常見的類型不匹配問題,是由于開啟數據類型2.0隱式轉換關閉引起。

解決方案

您可以通過以下方式解決:

  • 在SQL前添加set odps.sql.type.system.odps2=false; 并與SQL一同運行,關閉數據類型2.0打開隱式轉換處理。

  • 修改輸入參數數據類型。

錯誤9:The role not exists: acs:ram::xxxxxx:role/aliyunodpsdefaultrole

錯誤信息示例

ODPS-0130071:[1,1] Semantic analysis exception - external table checking failure, error message: java.lang.RuntimeException: {"RequestId":"A7BFAD2F-8982-547A-AB5E-93DAF5061FBD","HostId":"sts.aliyuncs.com","Code":"EntityNotExist.Role","Message":"The role not exists: acs:ram::xxxxxx:role/aliyunodpsdefaultrole. ","Recommend":"https://next.api.aliyun.com/troubleshoot?q=EntityNotExist.Role&product=Sts"}

錯誤描述

在創建OSS外部表時,需要指定訪問OSS的RAM Role,在此示例中指定了一個不存在的Role。導致系統在角色驗證時失敗,提示指定的角色不存在。

解決方案

修改創建外表ARN(odps.properties.rolearn)參數的值,ARN值的具體組成格式為acs:ram::<UID>:role/<Role>

其中:

  • UID:正常為16位數字。

  • Role:為RAM上用戶自己定義的角色名稱。

示例

'odps.properties.rolearn'='acs:ram::189xxxxxxx76:role/aliyunpaiaccessingossrole'

ARN具體獲得方法請點擊查看,進入頁面點擊角色名稱進行查看,示例如下:

image

image

錯誤10:encounter runtime exception while evaluating function MAX_PT

錯誤信息示例

FAILED: ODPS-0130071:[33,26] Semantic analysis exception - encounter runtime exception while evaluating function MAX_PT, detailed message: null

錯誤描述

在SQL執行的過程中,max_pt對應的最大分區發生變化,已經不是最大的分區,觸發引起數據不一致的檢測報錯。

解決方案

  • 避免在新生成分區時執行帶有max_pt的SQL語句。

  • 配置任務出錯自動重跑。

錯誤11:column xxx cannot be resolved

錯誤信息示例

ODPS-0130071:[73,12] Semantic analysis exception - column xxx cannot be resolved

錯誤描述

對應表中xxx列不存在。

解決方案

檢查SQL腳本,更新xxx至正確的列名。

錯誤12:evaluate function in class XX for user defined function YY does not match annotation ZZ

錯誤信息示例

FAILED: ODPS-0130071:[1,8] Semantic analysis exception - evaluate function in class test.MyPlus for user defined function my_plus does not match annotation bigint->bigint

錯誤描述

用戶寫UDF(Java或者Python UDF)的時候,代碼不符合UDF的規范,函數簽名annotation和實際的代碼不匹配。

解決方案

修改用戶的UDF代碼,使得函數簽名annotation和實際的代碼相匹配。

Query示例

--下面是一個不規范的Python UDF示例,實際代碼有兩個輸入參數,但是annotation中只有一個輸入參數
from odps.udf import annotate
@annotate("bigint->bigint")
class MyPlus(object):
   def evaluate(self, arg0, arg1):
       if None in (arg0, arg1):
           return None
       return arg0 + arg1

--下面是另外一個不規范的Python UDF示例,evaluate函數沒有self參數
from odps.udf import annotate
@annotate("bigint,bigint->bigint")
class MyPlus(object):
   def evaluate(arg0, arg1):
       if None in (arg0, arg1):
           return None
       return arg0 + arg1

--下面是正確的Python UDF
from odps.udf import annotate
@annotate("bigint,bigint->bigint")
class MyPlus(object):
   def evaluate(self, arg0, arg1):
       if None in (arg0, arg1):
           return None
       return arg0 + arg1

錯誤13:Vpc white list: , Vpc id: vpc-xxxx is not allowed to access

錯誤信息示例

FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: com.aliyun.odps.lot.cbo.plan.splitting.impl.vpc.AliHyperVpcRuntimeException: Vpc white list: , Vpc id: vpc-xxxx is not allowed to access.Contact project owner to set allowed accessed vpc id list.=

錯誤描述

用戶訪問外部表時,VPC配置不正確,VPC沒有打通MaxCompute的數據訪問。

解決方案

在VPC中配置MaxCompute可以訪問的白名單。具體請參見訪問VPC方案(專線直連)

錯誤14:Semantic analysis exception - physical plan generation failed

錯誤信息示例

FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: com.aliyun.odps.common.table.na.NativeException: kNotFound:The role_arn you provide not exists in HOLO auth service. Please check carefully.

錯誤描述

用戶訪問阿里云產品時,沒有開通服務角色(SLR),不能通過云產品服務角色授權訪問對方數據。

解決方案

單擊訪問控制開通SLR服務角色。