すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:ODPS-0130071

最終更新日:Jun 23, 2026

このトピックでは、エラーコード ODPS-0130071: Semantic analysis exception (セマンティック分析例外) の考えられる原因とソリューションについて説明します。

エラーメッセージ 1: 入力パーティション列の数 (n) がテーブルのパーティション列の数 (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 (n < m) 個のパーティションキー列しか指定されていません。その結果、特定のパーティションへのデータ書き込みに失敗し、エラーが返されます。

ソリューション

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: mapjoin ヒントワードがない結合条件には、等価式 (つまり、`=` と `AND` のみを使用) が必要です。

サンプル

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

説明

MaxCompute SQL では、結合操作の物理アルゴリズムとしてソートマージ結合が使用されます。結合条件には等価式を含める必要があります。実際のクエリ操作では、等価式内の左テーブルと右テーブルの列に基づいてシャッフリングが実行されます。

ソリューション

  • 結合条件に等価式が含まれていることを確認してください。

  • mapjoin ヒントを追加してください。

    説明

    ON 条件に非等価式しか含まれていない場合、結合操作後に大量のデータが生成される可能性があります。その結果、クエリ操作にかかる時間が長くなります。

-- エラー: 結合条件に非等価式しか含まれていません。
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
-- 正しい構文: 結合条件に両方のテーブルの列を含む等価式 (t1.key = t2.key) が含まれています。
SELECT t1. *
FROM src t1
JOIN src t2
ON t1.key = t2.key AND t1.value > t2.value;
-- 正しい構文: mapjoin ヒントを追加します。
SELECT /*+mapjoin(t1)*/ t1. *
FROM src t1
JOIN src t2
ON t1.value > t2.value;

エラーメッセージ 3: insert into HASH CLUSTERED テーブル/パーティション xxx は現在サポートされていません

サンプル

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

説明

INSERT INTO ステートメントを使用してクラスター化テーブルにデータを書き込むことはできません。

ソリューション

  • テーブルを通常テーブルに変更します。

  • 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 を使用しています。
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 を使用します。
INSERT overwrite TABLE sale_detail_hashcluster
VALUES ('a', 123, 'id123');

エラーメッセージ 4: GROUP BY キーに指定する必要があります

サンプル

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

説明

GROUP BY 句は、指定されたキーに基づいて入力テーブルのデータを集約します。集約操作が実行されると、次の結論が得られます:

  1. 集約キーに対応する列については、出力値を直接取得できます。また、一般的な関数 (非集計関数) を呼び出して、列のデータをさらに処理および計算することもできます。

  2. 集約キーに対応しない列については、出力値を直接取得できません。SUM、COUNT、AVG などの集計関数を呼び出して集計結果を計算する必要があります。

ソリューション

集約キーに対応しない列については、SUM、COUNT、AVG、ANY_VALUE などの集計関数を呼び出して集計結果を計算してください。

クエリ文の例

-- エラー: 列 `c` は GROUP BY キーになく、集計関数でも使用されていません。
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
-- 正しい構文: 列 `c` で集計関数 any_value() を使用します。
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 テーブルのパーティションフィールドの値は、次のルールに準拠する必要があります:

  • パーティションフィールドの値に、漢字などの 2 バイト文字を含めることはできません。値の長さは 1~128 バイトである必要があり、英字、数字、およびサポートされている特殊文字を含めることができます。値は英字で始まる必要があります。

  • 使用できる文字には、スペース、コロン (:)、アンダースコア (_)、ドル記号 ($)、番号記号 (#)、ピリオド (.)、感嘆符 (!)、アットマーク (@) が含まれます。\t\n/ などのエスケープ文字のような他の文字の動作は未定義です。

ソリューション

パーティションフィールドの値を有効な値に変更してください。

クエリ文の例

-- テーブルを作成します。
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

説明

Object Storage Service (OSS) 外部テーブルのみが MSCK REPAIR TABLE ステートメントをサポートします。詳細については、「ORC 外部テーブル」をご参照ください。

  • 方法 1 (推奨):パーティションの自動検出と追加

    この方法では、MaxCompute は OSS のディレクトリ構造に基づいて、不足しているパーティションを OSS 外部テーブルに自動的に追加します。これは、多数の履歴パーティションを一度にバックフィルする場合に便利です。

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

    注意

    この方法は、特に OSS ディレクトリに多数のパーティション (たとえば 1,000 以上) が含まれている場合、増分パーティションの追加には適していません。これは、新しいパーティションの数が既存のパーティションの数よりもはるかに少ない場合に、msck コマンドを頻繁に実行すると、OSS ディレクトリの反復的なスキャンとメタデータ更新リクエストが大量に発生するためです。これにより、コマンドの実行効率が大幅に低下します。したがって、増分パーティションを追加する必要があるシナリオでは、方法 2 を使用することを推奨します。

  • 方法 2:パーティションの手動追加

    この方法は、最初の履歴パーティションがロードされた後に、定期的に新しいパーティションを追加する場合に推奨されます。データ書き込みジョブを実行する前に、新しいパーティションを作成します。パーティションが作成されると、外部テーブルはパーティションをリフレッシュすることなく、対応する 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_namedirection に対応し、col_valueN, NE, S, SW, W に対応します。1 つの add partition ステートメントは 1 つのサブディレクトリに対応し、複数の OSS サブディレクトリには複数の add partition ステートメントが必要です。

  1. OSS に demo8 という名前のディレクトリを作成します。次に、そのディレクトリに 2 つのパーティションフォルダを作成し、対応するファイルを配置します。

    • パーティションフォルダ: $pt1=1/$pt2=2。ファイル名: demo8-pt1.txt

    • パーティションフォルダ: $pt1=3/$pt2=4。ファイル名: demo8-pt2.txt

  2. 外部テーブルを作成し、pt フィールドを指定します。

  3. --外部テーブルの作成
    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          |
    +------------+------------+------------+------------+
  4. OSS 外部テーブルのパーティション列名が OSS ディレクトリ構造と一致しない場合は、ディレクトリを指定します。

  5. --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/';
    --コミットモードを無効にしてデータを挿入
    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   |
    +------+------+-----+-----+

ソリューション

MSCK REPAIR コマンドを実行する前に、ドキュメントの説明に従って OSS 外部テーブルを作成する必要があります。

クエリ文の例

--通常テーブルの作成
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: ソースの列 xx の型 yy は、送信先の列 zz の型 ttt と互換性がありません

サンプル

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

説明

テーブルにデータを挿入する場合、宛先テーブルのデータの型は挿入されるデータの型と一致するか、挿入されるデータの型が宛先テーブルのデータの型に暗黙的に変換できる必要があります。そうでない場合、エラーが返されます。

ソリューション

クエリ文を修正して、挿入されるデータの型が宛先テーブルのデータの型と一致するようにしてください。

クエリ文の例

-- テーブルを作成します。
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 の入力パラメーターのデータの型が一致しません。一般的な型の不一致の問題は、MaxCompute V2.0 データ型バージョンが有効になった後、暗黙の型変換が許可されなくなることが原因で発生します。

ソリューション

次のいずれかの方法を使用します:

  • set odps.sql.type.system.odps2=false; を SQL クエリの前に追加して一緒に実行します。これにより、データ型 2.0 が無効になり、暗黙の型変換が有効になります。

  • 入力パラメーターのデータの型を変更します。

エラーメッセージ 9: ロールが存在しません: 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 ロールを指定する必要があります。このケースでは、存在しない RAM ロールが使用されたため、ロールの認証に失敗しています。

ソリューション

odps.properties.rolearn パラメーターの値を変更します。 Alibaba Cloud リソースネーム (ARN) のフォーマットは acs:ram::<UID>:role/<Role> です。

次の情報にご注意ください:

  • UID: 16 桁の数字です。

  • Role: Resource Access Management (RAM) コンソールで設定されたロールの名前です。

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

ARN を取得するには、[ロール] ページに移動します。ページでロール名をクリックすると、その詳細が表示されます。

RAM コンソールで、[ID 管理] > [ロール] ページに移動し、ロールのリストから AliyunPAIAccessingOSSRole ロールを見つけます。

ロールの詳細ページの [基本情報] セクションで、[ARN] フィールドを見つけます。その右側にあるコピーボタンをクリックして ARN の値を取得します。

エラーメッセージ 10: 関数 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: クラス XX 内のユーザー定義関数 YY の evaluate 関数が、アノテーション 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

説明

Java または Python のユーザー定義関数 (UDF) のコードが UDF の作成基準に準拠していません。関数シグネチャのアノテーションの情報がコードの情報と異なります。

ソリューション

UDF コードを修正し、関数シグネチャのアノテーションの情報がコードの情報と一致するようにしてください。

クエリ文の例

-- 以下は、不正な Python UDF の例です。実装には 2 つの入力パラメーターがありますが、アノテーションでは 1 つしか指定されていません。
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 ホワイトリスト: , VPC ID: vpc-xxxx はアクセスを許可されていません

サンプル

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 の設定が無効なためにエラーメッセージが表示されます。

ソリューション

VPC に IP アドレスホワイトリストを設定し、MaxCompute がホワイトリスト内の IP アドレスから VPC 内のサービスにアクセスできることを確認してください。詳細については、「ネットワーク接続プロセス」の「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.

説明

Alibaba Cloud サービスにアクセスする際、そのサービスにリンクされたサービスリンクロール (SLR) がご利用の Alibaba Cloud アカウントに割り当てられていません。その結果、SLR を使用してサービスのデータにアクセスできません。

ソリューション

ここをクリックして、SLR をご利用の Alibaba Cloud アカウントに割り当ててください。