Tüm Ürünler
Search
Belge Merkezi

MaxCompute:ODPS-0130071

Son Güncelleme:Oct 04, 2026

Bu konu, ODPS-0130071: Semantic analysis exception hata kodunun olası nedenlerini açıklar ve çözüm önerileri sunar.

Hata Mesajı 1: the number of input partition columns (n) doesn't equal to table's partition columns (m)

Örnek

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

Açıklama

Veri eklenen tablo bölümlenmiş bir tablodur. Tabloda m adet bölüm alanı bulunurken, veriyi eklemek için çalıştırılan SQL ifadesinde n (n < m) adet bölüm anahtarı sütunu belirtilmiştir. Bu durum, verilerin belirli bir bölüme yazılamamasına ve hata alınmasına neden olur.

Çözümler

SQL ifadesini, ifadede belirtilen bölüm anahtarı sütunlarının tablodaki bölüm alanlarıyla eşleşmesini sağlayacak şekilde değiştirin.

Örnekler

-- Create a table.
CREATE TABLE if NOT EXISTS mf_sale_detail
(
  shop_name     STRING,
  customer_id   STRING,
  total_price   DOUBLE
)
partitioned BY
(
  sale_date string,
  region    string
);
-- Error: The target table has two partition levels, but the PARTITION clause is either missing or incomplete.
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)
-- Correct: Specify all partitions in the PARTITION clause.
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
-- Correct: Use dynamic partitioning.
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

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

Örnek

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

Açıklama

MaxCompute SQL'de birleştirme işlemleri için fiziksel algoritma olarak sort-merge join kullanılır. Birleştirme koşulu mutlaka bir eşitlik ifadesi içermelidir. Gerçek sorgu işlemlerinde, eşitlik ifadesindeki sol ve sağ tabloların sütunlarına göre karıştırma (shuffling) işlemi gerçekleştirilir.

Çözümler

  • Birleştirme koşulunun bir eşitlik ifadesi içerdiğinden emin olun.

  • Map join ipucu ekleyin.

    Not

    ON koşulu yalnızca eşitsizlik ifadesi içeriyorsa, birleştirme işleminden sonra büyük miktarda veri oluşabilir. Bu durum, sorgu işleminin daha uzun sürmesine neden olur.

Örnekler

-- Error: The join condition contains only a non-equality expression.
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
-- Correct: The join condition includes an equality expression (t1.key = t2.key) involving columns from both tables.
SELECT t1. *
FROM src t1
JOIN src t2
ON t1.key = t2.key AND t1.value > t2.value;
-- Correct: Add a mapjoin hint.
SELECT /*+mapjoin(t1)*/ t1. *
FROM src t1
JOIN src t2
ON t1.value > t2.value;

Hata Mesajı 3: insert into HASH CLUSTERED table/partition xxx is not current supported

Örnek

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

Açıklama

INSERT INTO ifadesi kullanılarak kümelenmiş bir tabloya veri yazılamaz.

Çözümler

  • Tabloyu normal bir tabloya dönüştürün.

  • INSERT INTO ifadesini INSERT OVERWRITE ifadesiyle değiştirin.

Örnekler

-- Create a clustered table.
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;
-- Error: Using INSERT INTO with a clustered table.
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
-- Correct: Use INSERT INTO with a common table.
CREATE TABLE sale_detail
(
  shop_name   STRING,
  total_price decimal,
  customer_id BIGINT
);
INSERT INTO sale_detail
VALUES ('a', 123, 'id123');
-- Correct: Use INSERT OVERWRITE with the clustered table.
INSERT overwrite TABLE sale_detail_hashcluster
VALUES ('a', 123, 'id123');

Hata Mesajı 4: should appear in GROUP BY key

Örnek

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

Açıklama

GROUP BY yan tümcesi, girdi tablosundaki verileri belirtilen anahtara göre gruplar. Gruplama işlemi tamamlandıktan sonra aşağıdaki sonuçlar elde edilir:

  1. Gruplama anahtarına karşılık gelen sütun için çıkış değerleri doğrudan alınabilir. Ayrıca, sütundaki verileri daha fazla işlemek ve hesaplamak amacıyla yaygın işlevler (gruplama dışı işlevler) çağrılabilir.

  2. Gruplama anahtarına karşılık gelmeyen sütunlar için çıkış değerleri doğrudan alınamaz. Gruplama sonuçlarını hesaplamak üzere SUM, COUNT ve AVG gibi gruplama işlevlerini çağırmanız gerekir.

Çözümler

Gruplama anahtarına karşılık gelmeyen sütunlar için gruplama sonucunu hesaplamak amacıyla SUM, COUNT, AVG ve ANY_VALUE gibi gruplama işlevlerini kullanın.

Sorgu ifadeleri örnekleri

-- Error: Column `c` is not in the GROUP BY key and is not used in an aggregate function.
SELECT a, sum(b), c
FROM VALUES (1L, 2L, 3L) AS t(a, b, c)
GROUP BY a;
-- Error message is returned.
FAILED: ODPS-0130071:[1,19] Semantic analysis exception - column reference t.c should appear in GROUP BY key
-- Correct: Use the aggregate function any_value() on column `c`.
SELECT a, sum(b), any_value(c)
FROM VALUES (1L, 2L, 3L) AS t(a, b, c)
GROUP BY a;

Hata Mesajı 5: Invalid partition value

Örnek

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

Açıklama

Bölüm alanının değeri geçersizdir. MaxCompute tablosundaki bölüm alanlarının değerleri aşağıdaki kurallara uymalıdır:

  • Bölüm alanının değeri Çince karakterler gibi çift baytlı karakterler içeremez. Değer 1 ila 128 bayt uzunluğunda olmalı; harf, rakam ve desteklenen özel karakterleri içerebilir. Değer bir harfle başlamalıdır.

  • İzin verilen karakterler arasında boşluk, iki nokta (:), alt çizgi (_), dolar işareti ($), diyez (#), nokta (.), ünlem (!) ve at işareti (@) bulunur. \t, \n ve / gibi kaçış karakterleri dahil diğer karakterlerin davranışı tanımsızdır.

Çözümler

Bölüm alanının değerini geçerli bir değerle değiştirin.

Sorgu ifadeleri örnekleri

-- Create a table.
CREATE TABLE mc_test
(
  a bigint
)
partitioned BY
(
  ds string
);
-- Error: The partition value '${today}' is invalid.
ALTER TABLE mc_test ADD PARTITION(ds = '${today}');
-- Error message is returned.
FAILED: ODPS-0130071:[1,40] Semantic analysis exception - Invalid partition value: '${today}'
-- Correct: Change the partition value to a valid one, such as '20221206'.
ALTER TABLE mc_test ADD PARTITION(ds='20221206');

Hata Mesajı 6: only oss external table support msck repair syntax

Örnek

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

Açıklama

Yalnızca Object Storage Service (OSS) harici tablolar MSCK REPAIR TABLE ifadesini destekler. Daha fazla bilgi için bkz. ORC harici tablolar.

  • Yöntem 1 (Önerilen): Bölümleri otomatik olarak keşfetme ve ekleme.

    Bu yöntemle, MaxCompute OSS dizin yapısına göre eksik bölümleri bir OSS harici tabloya otomatik olarak ekler. Bu yöntem, çok sayıda geçmiş bölümü tek seferde doldurmak için kullanışlıdır.

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

    Not

    Bu yöntem, özellikle bir OSS dizini çok sayıda bölüm (örneğin, 1.000'den fazla) içeriyorsa artımlı bölümler eklemek için uygun değildir. Yeni bölüm sayısı mevcut bölüm sayısından çok daha az olduğunda, msck komutunu sıkça çalıştırmak OSS dizininin çok sayıda tekrarlı taranmasına ve meta veri güncelleme isteklerine yol açar. Bu durum, komutun çalıştırma verimliliğini önemli ölçüde düşürür. Bu nedenle, artımlı bölümler eklenmesi gereken senaryolar için Yöntem 2'yi kullanmanızı öneririz.

  • Yöntem 2: Bölümleri manuel olarak ekleme.

    Geçmiş bölümler ilk kez yüklendikten sonra yeni bölümlerin düzenli olarak eklenmesi için bu yöntem önerilir. Veri yazma işlerinizi çalıştırmadan önce yeni bölümleri oluşturun. Bir bölüm oluşturulduktan sonra, harici tablo bölümü yenilemeye gerek kalmadan ilgili OSS dizinindeki en son verileri okuyabilir.

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

    col_name ve col_value değerleri, bölüm veri dosyalarının dizin adlarıyla eşleşmelidir. Örneğin, aşağıdaki OSS dizin yapısını varsayalım: col_name direction öğesine karşılık gelir ve col_value N, NE, S, SW, W öğelerine karşılık gelir. Bir add partition ifadesi bir alt dizine karşılık gelir ve birden fazla OSS alt dizini için birden fazla add partition ifadesi gerekir.

Örnek

  1. OSS'de demo8 adlı bir dizin oluşturun. Ardından, dizinde iki bölüm klasörü oluşturun ve ilgili dosyaları bunlara yerleştirin.

    • Bölüm klasörü: $pt1=1/$pt2=2. Dosya adı: demo8-pt1.txt.

    • Bölüm klasörü: $pt1=3/$pt2=4. Dosya adı: demo8-pt2.txt.

  2. Bir harici tablo oluşturun ve pt alanlarını belirtin.

  3. --Create an external table
    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/";
    --Specify the partition fields
    MSCK REPAIR TABLE  mf_oss_spe_pt ADD PARTITIONS
    with PROPERTIES ('odps.msck.partition.column.mapping'='pt1:$pt1,pt2:$pt2');
    --Query data
    select * from mf_oss_spe_pt where pt1=1 and pt2=2;
    --Result
    +------------+------------+------------+------------+
    | id         | name       | pt1        | pt2        |
    +------------+------------+------------+------------+
    | 1          | kyle       | 1          | 2          |
    | 2          | nicole     | 1          | 2          |
    +------------+------------+------------+------------+
    --Query data
    select * from mf_oss_spe_pt where pt1=3 and pt2=4;
    +------------+------------+------------+------------+
    | id         | name       | pt1        | pt2        |
    +------------+------------+------------+------------+
    | 3          | john       | 3          | 4          |
    | 4          | lily       | 3          | 4          |
    +------------+------------+------------+------------+
  4. OSS harici tablosundaki bölüm sütunu adları OSS dizin yapısıyla eşleşmiyorsa dizini belirtin.

  5. --The mapping between MaxCompute partitions and OSS directories is as follows:
    --pt1=8-->8
    --pt2=8-->$pt2=8
    --Add a partition
    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/';
    --Disable commit mode and insert data
    set odps.sql.unstructured.oss.commit.mode=false;
    insert into mf_oss_spe_pt partition (pt1=8,pt2=8) values (1,'tere');
    --Query data
    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   |
    +------+------+-----+-----+

Çözümler

MSCK REPAIR komutunu çalıştırabilmeniz için öncelikle belgelerde açıklandığı şekilde bir OSS harici tablosu oluşturmanız gerekir.

Sorgu ifadeleri örnekleri

--Create a common table
CREATE TABLE mc_test
(
  a BIGINT
)
partitioned BY
(
  ds string
);
--Error. A common table cannot perform the msck repair operation.
msck TABLE mc_test ADD partitions;
FAILED: ODPS-0130071:[1,12] Semantic analysis exception - only oss external table support msck repair syntax

Hata Mesajı 7: column xx in source has incompatible type yy with destination column zz, which has type ttt

Örnek

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

Açıklama

Bir tabloya veri eklenirken, hedef tablonun veri türü eklenen verinin veri türüyle eşleşmelidir veya eklenen verinin veri türü hedef tablonun veri türüne örtük olarak dönüştürülebilir olmalıdır. Aksi takdirde hata döndürülür.

Çözümler

Eklenen verinin veri türünün hedef tablonun veri türüyle eşleşmesini sağlamak için sorgu ifadesini değiştirin.

Sorgu ifadeleri örnekleri

-- Create a table.
odps> CREATE TABLE mc_test
(
  a datetime
);
-- Error: The data types are incompatible.
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
-- Correct: Insert data of the correct type.
odps> INSERT overwrite TABLE mc_test
VALUES (datetime '2022-12-06 14:23:45');

Hata Mesajı 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)

Örnek

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)

Açıklama

DATEDIFF işlevinin giriş parametrelerinin veri türleri eşleşmiyor. Yaygın bir tür uyuşmazlığı sorunu, MaxCompute V2.0 veri türü sürümü etkinleştirildikten sonra örtük veri türü dönüşümlerine izin verilmemesinden kaynaklanır.

Çözümler

Aşağıdaki yöntemlerden birini kullanın:

  • SQL sorgusundan önce set odps.sql.type.system.odps2=false; ekleyin ve birlikte çalıştırın. Bu işlem, veri türü 2.0'ı devre dışı bırakır ve örtük tür dönüşümünü etkinleştirir.

  • Giriş parametrelerinin veri türlerini değiştirin.

Hata Mesajı 9: The role not exists: acs:ram::xxxxxx:role/aliyunodpsdefaultrole

Örnek

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.alibabacloud.com/troubleshoot?q=EntityNotExist.Role&product=Sts"}

Açıklama

Bir OSS harici tablosu oluştururken, OSS'e erişmek için kullanılan bir RAM rolü belirtmeniz gerekir. Bu durumda, mevcut olmayan bir RAM rolü kullanılmıştır. Sonuç olarak, rol kimlik doğrulaması başarısız olur.

Çözümler

odps.properties.rolearn parametresinin değerini değiştirin. Alibaba Cloud Resource Name (ARN) biçimi acs:ram::<UID>:role/<Role> şeklindedir.

Aşağıdaki bilgilere dikkat edin:

  • UID: 16 basamaklı bir sayı.

  • Role: Resource Access Management (RAM) konsolunda yapılandırılan bir rolün adı.

Örnekler

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

ARN'i almak için Roller sayfasına gidin. Sayfada, ayrıntılarını görüntülemek için rol adına tıklayın.

RAM konsolunda, Identity Management > Roles sayfasında roller listesinde AliyunPAIAccessingOSSRole rolünü bulun.

Rol ayrıntıları sayfasında, Temel Bilgiler bölümünde ARN alanını bulun. ARN değerini almak için sağındaki kopyala düğmesine tıklayın.

Hata Mesajı 10: encounter runtime exception while evaluating function MAX_PT

Örnek

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

Açıklama

Bir SQL ifadesi çalıştırıldığında, max_pt tarafından belirtilen bölüm değişir. Bu durum, veri tutarsızlığı nedeniyle hataya neden olur.

Çözümler

  • max_pt belirtilen yeni bölümler için SQL ifadelerini çalıştırmayın.

  • Hata bir yapılandırma görevi için bildirilirse, sistemin yapılandırma görevini yeniden çalıştırmasını sağlayın.

Hata Mesajı 11: column xxx cannot be resolved

Örnek

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

Açıklama

xxx sütunu tabloda mevcut değildir.

Çözümler

SQL betiğini kontrol edin ve xxx'i geçerli bir sütun adıyla güncelleyin.

Hata Mesajı 12: evaluate function in class XX for user defined function YY does not match annotation ZZ

Örnek

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

Açıklama

Java veya Python kullanıcı tanımlı işlevi (UDF) kodu UDF yazım standartlarına uymuyor. İşlev imzası açıklamalarındaki bilgiler koddakilerle aynı değil.

Çözümler

İşlev imzası açıklamalarındaki bilgilerin kodla aynı olması için UDF kodunu değiştirin.

Sorgu ifadeleri örnekleri

-- The following is an example of an incorrect Python UDF. The implementation has two input parameters, but the annotation specifies only one.
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
-- The following is another example of an incorrect Python UDF. The evaluate function is missing the self parameter.
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
-- The following is the correct 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

Hata Mesajı 13: Vpc white list: , Vpc id: vpc-xxxx is not allowed to access

Örnek

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.=

Açıklama

Harici tablo kullanarak bir VPC'deki hizmetlere erişirken, geçersiz VPC yapılandırmaları nedeniyle bu hata mesajı görünür.

Çözümler

VPC'de bir IP adresi izin listesini yapılandırın ve MaxCompute'in VPC'deki hizmetlere izin listesindeki bir IP adresinden erişebilmesini sağlayın. Daha fazla bilgi için bkz. Ağ bağlantısı süreci içindeki "VPC üzerinden erişim (özel bağlantı)" bölümü.

Hata Mesajı 14: Semantic analysis exception - physical plan generation failed

Örnek

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.

Açıklama

Bir Alibaba Cloud hizmetine erişirken, hizmete bağlı hizmet bağlantılı rol (SLR) Alibaba Cloud hesabınıza atanmamıştır. Bu nedenle, SLR kullanarak hizmetin verilerine erişemezsiniz.

Çözümler

SLR'yi Alibaba Cloud hesabınıza atamak için buraya tıklayın.