エラーコード: ODPS-0130071: セマンティック解析例外
エラーメッセージ1: 入力パーティション列の数 (n) がテーブルのパーティション列 (m) と等しくない
サンプル
失敗: ODPS-0130071:[m,n] セマンティック解析例外-入力パーティション列の数 (n) がテーブルのパーティション列 (m) と等しくない
説明
データが挿入されるテーブルは、パーティションテーブルである。 テーブルにはm個のパーティションフィールドがありますが、データを挿入するために実行されるSQL文では、n (n < m) 個のパーティションキー列が指定されています。 その結果、特定のパーティションへのデータの書き込みに失敗し、エラーが返されます。
ソリューション
SQL文で指定されたパーティションキー列がテーブルのパーティションフィールドと一致するように、SQL文を変更します。
例
-- 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
);
-- Incorrect usage: The destination table has two levels of partitions. The partition clause specifies some or none of the partitions.
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 usage: The partition clause specifies complete partition information.
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 usage: Dynamic partitioning is used.
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: 期待等式式 (つまり、'=' と 'AND' のみを使用) 結合条件なしでmapjoinヒント
サンプル
ODPS-0130071:[m,n] セマンティック分析例外-mapjoinヒントなしで結合条件に等式式を期待する (つまり、'=' と 'AND' のみを使用する)
説明
MaxCompute SQLでは、ソートマージ結合は結合操作の物理アルゴリズムとして使用されます。 結合条件には、同等の式を含める必要があります。 実際のクエリ操作では、等価式の左右のテーブルの列に基づいてシャッフルが実行されます。
ソリューション
(1) join条件に同等の式が含まれていることを確認します。
(2) マップ結合ヒントを追加します。 (注: ON条件に非等価式のみが含まれる場合、結合演算後に大量のデータが生成される可能性があります。 その結果、クエリ操作に時間がかかります。
例
-- Incorrect usage: The join condition contains only a non-equivalent expression.
odps>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 usage: The join condition contains the equivalent expression t1.key = t2.key.
odps>select t1. *
from src t1
join src t2
on t1.key = t2.key and t1.value > t2.value;
-- Correct usage: A map join hint is added.
odps>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] セマンティック分析例外-HASH CLUSTEREDテーブル /パーティションへの挿入xxxは現在サポートされていません
説明
INSERT INTOステートメントを使用して、クラスタ化されたテーブルにデータを書き込むことはできません。
ソリューション
(1) テーブルを共通テーブルに変更します。
(2) INSERT INTOステートメントをINSERT OVERWRITEステートメントに変更します。
例
-- Create a clustered table.
odps>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;
-- Incorrect usage: Insert data into the clustered table.
odps>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 usage: Insert data into a common table.
odps>create table sale_detail
(
shop_name STRING,
total_price decimal,
customer_id BIGINT
);
odps>insert into sale_detail
values ('a', 123, 'id123');
-- Correct usage: Execute the INSERT OVERWRITE statement for the clustered table.
odps>insert overwrite table sale_detail_hashcluster
values ('a', 123, 'id123');
エラーメッセージ4: GROUP BYキーに表示されるはずです
サンプル
ODPS-0130071:[m,n] セマンティック分析例外-列参照xx.yyがGROUP BYキーに表示されるはずです
説明
GROUP BY句は、指定されたキーに基づいて入力テーブルのデータを集計します。 集計操作が実行された後、次の結論が得られます。
集計キーに対応する列については、出力値を直接取得できます。 共通関数 (非集計関数) を呼び出して、列内のデータをさらに処理および計算することもできます。
集計キーに対応しない列については、出力値を直接取得することはできません。 集計結果を計算するには、SUM、COUNT、AVGなどの集計関数を呼び出す必要があります。
ソリューション
集計キーに対応しない列については、SUM、COUNT、AVG、ANY_VALUEなどの集計関数を呼び出して、集計結果を計算します。
クエリの例
-- Incorrect usage: Column c does not correspond to the key of GROUP BY. No aggregate function is used.
odps> 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
-- Correct usage: Use the aggregate function ANY_VALUE to calculate the aggregate value of Column c.
odps> select a, sum(b), any_value(c)
from values (1L, 2L, 3L) as t(a, b, c)
group by a;エラーメッセージ5: 無効なパーティション値
サンプル
ODPS-0130071:[m,n] セマンティック解析例外-無効なパーティション値: 'xxx'
説明
パーティションフィールドの値が無効です。 MaxComputeテーブルのパーティションフィールドの値は、次のルールに従う必要があります。
パーティションフィールドの値には、漢字などの2バイト文字を含めることはできません。 値は1 ~ 128バイトで、英数字、およびサポートされている特殊文字を使用できます。 値は文字で始まる必要があります。
次の特殊文字がサポートされています: スペース、コロン (:) 、アンダースコア (_) 、ドル記号 ($) 、数字記号 (#) 、ピリオド (.) 、感嘆符 (!) 、およびアット記号 (@) 。 エスケープ文字
\t、\n、/など、他の文字の動作は定義されていません。
ソリューション
パーティションフィールドの値を有効な値に変更します。
クエリの例
-- Create a table.
odps> create table mc_test
(
a bigint
)
partitioned by
(
ds string
);
-- Incorrect usage: The value '${today}' is invalid for the partition field.
odps> alter table mc_test add partition(ds = '${today}');
FAILED: ODPS-0130071:[1,40] Semantic analysis exception - Invalid partition value: '${today}'
-- Correct usage: Change the value of the partition field to the valid value '20221206'.
odps> alter table mc_test add partition(ds='20221206');エラーメッセージ6: 唯一のoss外部テーブルサポートmsck修復構文
サンプル
ODPS-0130071:[m,n] セマンティック解析例外のみoss外部テーブルサポートmsck修復構文
説明
Object Storage Service (OSS) 外部テーブルのみが、MSCK REPAIR TABLEステートメントをサポートしています。 詳細については、「OSS外部テーブルの作成」をご参照ください。
方法1 (推奨): MaxComputeは、OSSディレクトリ構造を自動的に解析し、パーティションを識別し、パーティションデータをOSS外部テーブルに追加します。
このように、MaxComputeは、パーティションキー列とパーティション名の名前に基づいてパーティションを1つずつ追加するのではなく、OSS外部テーブルの作成時に指定したパーティションディレクトリに基づいてOSS外部テーブルのパーティションを自動的に補足します。 この方法は、欠落しているすべての履歴パーティションを一度に補完するのに適しています。
msck repair TABLE <mc_oss_extable_name> ADD partitions [ WITH properties (key:VALUE, key: VALUE ...)];説明この方法は、パーティションが継続的に追加されるシナリオ、特にOSSディレクトリに多数のパーティションが含まれるシナリオには適していません。 たとえば、OSSディレクトリに1,000を超えるパーティションが含まれている場合は、この方法を使用しないことを推奨します。 新しいパーティションの数が既存のパーティションの数よりもはるかに少ない場合、
msckコマンドを頻繁に使用すると、OSSディレクトリに対するスキャンとメタデータの更新要求が多数繰り返されます。 これは、コマンドの実行効率を著しく低下させる。 したがって、新しいパーティションのデータを更新する場合は、方法2を使用することをお勧めします。方法2: 次のコマンドを手動で実行して、パーティションデータをOSS外部テーブルに追加します。
特定のパーティションが作成されており、定期的にパーティションを追加する必要がある場合は、データ書き込みのタスクを実行する前に、この方法を使用してパーティションを作成することをお勧めします。 パーティションが作成された後、新しいデータがOSSディレクトリに書き込まれた場合でも、外部テーブルは関連するパーティションを更新する必要なく、OSSディレクトリから最新のデータを読み取ることができます。
ALTER TABLE < mc_oss_extable_name > ADD PARTITION (< col_name >= < col_value >)[ ADD PARTITION (< col_name >= < col_value >)...][location URL];col_nameおよびcol_valueの値は、パーティションデータファイルが格納されているOSSサブディレクトリの名前と一致している必要があります。 次の図に示すパーティションデータファイルのOSSディレクトリ構造を使用する場合、col_nameの値は
direction、col_valueの値はN、NE、S、SW、Wです。ALTER TABLE文の1つのadd partition句を使用して、OSSサブディレクトリにマップされているパーティションを追加します。add partition句の数は、OSSサブディレクトリの数と同じである必要があります。
サンプル文
OSSに
demo8という名前のディレクトリを作成し、そのディレクトリの下に関連ファイルを格納する2つのパーティションフォルダーを作成します。demo8-pt1.txtファイルは、パーティションフォルダ$pt1=1/$pt2=2に保存されます。demo8-pt2.txtファイルは、パーティションフォルダ$pt1=3/$pt2=4に保存されます。
外部テーブルを作成し、
partitionフィールドを指定します。-- Create an OSS 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 partition fields. MSCK REPAIR TABLE mf_oss_spe_pt ADD PARTITIONS WITH PROPERTIES ('odps.msck.partition.column.mapping'='pt1:$pt1,pt2:$pt2'); -- Query data from the external table. SELECT * FROM mf_oss_spe_pt WHERE pt1=1 AND pt2=2; -- The following result is returned: +------------+------------+------------+------------+ | id | name | pt1 | pt2 | +------------+------------+------------+------------+ | 1 | kyle | 1 | 2 | | 2 | nicole | 1 | 2 | +------------+------------+------------+------------+ -- Query data from the external table. SELECT * FROM mf_oss_spe_pt WHERE pt1=3 AND pt2=4; +------------+------------+------------+------------+ | id | name | pt1 | pt2 | +------------+------------+------------+------------+ | 3 | john | 3 | 4 | | 4 | lily | 3 | 4 | +------------+------------+------------+------------+OSS外部テーブルのパーティションキー列の名前がOSSディレクトリ構造と一致しない場合は、OSSディレクトリを指定します。
-- Mappings between MaxCompute partitions and OSS directories. --pt1=8-->8 --pt2=8-->$pt2=8 -- Add partitions. 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 the commit mode. -- Insert data into the external table. SET odps.sql.unstructured.oss.commit.mode=false; INSERT INTO mf_oss_spe_pt PARTITION (pt1=8,pt2=8) VALUES (1,'tere'); -- Query data from the external table. 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 tableステートメントを実行する前に、ドキュメントの指示に従ってOSS外部テーブルを作成します。
クエリの例
-- Create a common table.
odps> create table mc_test
(
a bigint
)
partitioned by
(
ds string
);
-- Incorrect usage: The MSCK REPAIR TABLE statement cannot be executed for a common table.
odps> msck table mc_test add partitions;
FAILED: ODPS-0130071:[1,12] Semantic analysis exception - only oss external table support msck repair syntax
エラーメッセージ7: ソースの列xxには、宛先列zzと互換性のないタイプyyがあり、タイプttt
サンプル
ODPS-0130071:[m,n] セマンティック分析例外-ソースの列xxは、タイプがtttの宛先列zzと互換性のないタイプyyを持っています
説明
データがテーブルに挿入されるとき、宛先テーブルのデータ型は挿入されたデータのデータ型と一致する必要があります。または、挿入されたデータのデータ型を宛先テーブルのデータ型に暗黙的に変換できます。 それ以外の場合は、エラーが返されます。
ソリューション
クエリ文を変更して、挿入されたデータのデータ型がターゲットテーブルのデータ型と一致するようにします。
クエリの例
-- Create a table.
odps> create table mc_test
(
a datetime
);
-- Incorrect usage: A data type mismatch issue occurs.
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 usage: Data of a valid data type is inserted.
odps> insert overwrite table mc_test
values (datetime '2022-12-06 14:23:45');
エラーメッセージ8: 関数dateardiffは (STRING、STRING、STRING) でオーバーロードされた関数と一致できません。候補はBIGINT datediff (DATE arg0、DATE arg1、STRING arg2) です。ストリングarg1); INT DATEDIFF(TIMESTAMP arg0、TIMESTAMP arg1)
サンプル
ODPS-0130071:[m,n] DATarantic解析例外-関数datediffは (STRING, STRING, STRING, STRING) でオーバーロードされた関数と一致できません。INT DATEDIFF(STRING arg0, STRING arg1); INT DATEDIFF(TIMESTAMP arg0, TIMESTAMP arg1)
説明
関数DATEDIFFの入力パラメータのデータ型が一致しません。 MaxCompute V2.0データ型エディションが有効になった後、暗黙的なデータ型変換が許可されないため、一般的なタイプの不一致の問題が発生します。
ソリューション
次のいずれかの方法を使用します。
(1) 実行するsql文の前にset odps. SQL. type.system.odps2=false; を追加し、それらをまとめてコミットして、MaxCompute V2.0データ型エディションを無効にします。 MaxCompute V2.0データ型エディションを無効にすると、暗黙的なデータ型変換が許可されます。
(2) 入力パラメーターのデータ型を変更します。
エラーメッセージ9: ロールが存在しません: acs:ram::xxxxxx:role/aliyunodpsdefaultrole
サンプル
ODPS-0130071:[1,1] セマンティック分析例外-外部テーブルチェックの失敗、エラーメッセージ: java.lang.RuntimeException: {"RequestId":"A7BFAD2F-8982-547A-AB5E-93DAF5061FBD","HostId":"sts.aliyuncs.com","Code":"EntityNotExist.Role","message":"The role not exists: acs:ram::: xxxxxxxx: role /aliyunodpsdefautrole。 "," 推奨 ":" https://next.api.aliyun.com/troubleshoot?q=EntityNotExist.Role&product=Sts "}
説明
OSS外部テーブルを作成するときは、OSSへのアクセスに使用するRAMロールを指定する必要があります。 この場合、存在しないRAMロールが使用されます。 その結果、ロール認証は失敗します。
ソリューション
Alibaba Cloud Resource Name (ARN) を指定するodps.properties.rolearnパラメーターの値を変更します。 ARNの形式は次のとおりです。
"acs:ram ::< UID>:role/<Role>"
次の情報に注意してください。
UID: 16桁の番号。
Role: Resource Access Management (RAM) コンソールで構成されているロールの名前。
例
'odps.properties.rolearn'='acs:ram::189xxxxxxx76:role /aliyunpaiaccesssingossrole'
ARNを取得するには、RAMコンソールに移動します。 次の図に示すように、ロールページでロール名をクリックしてARNを表示します。


エラーメッセージ10: 関数MAX_PTの評価中にランタイム例外が発生
サンプル
FAILED: ODPS-0130071:[33,26] セマンティック解析例外-関数MAX_PTの評価中のランタイム例外、詳細メッセージ: null
説明
SQL文が実行されると、max_ptで指定されたパーティションが変更されます。 その結果、データの不整合によりエラーが返されます。
ソリューション
1. 新しいパーティションにmax_ptを指定したSQL文は実行しないでください。
2. 構成タスクに対してエラーが報告された場合、システムが構成タスクを再実行できるようにする
エラーメッセージ11: 列xxxを解決できません
サンプル
ODPS-0130071:[73,12] セマンティック分析例外-列xxxを解決できません
説明
xxx列はテーブルに存在しません。
ソリューション
SQLスクリプトを確認し、xxxを有効な列名に更新します。
エラーメッセージ12: ユーザー定義関数YYのクラスXXの評価関数がアノテーションZZと一致しない
サンプル
FAILED: ODPS-0130071:[1,8] セマンティック分析例外-クラステストの評価関数。ユーザー定義関数my_plusのMyPlusがアノテーションbigint->bigintと一致しません
説明
JavaまたはPythonのユーザー定義関数 (UDF) のコードは、UDFの書き込み標準に準拠していません。 関数署名注釈の情報は、コードの情報と同じではありません。
ソリューション
UDFコードを変更して、関数署名注釈の情報がコードの情報と同じになるようにします。
クエリの例
-- The following sample code is the invalid code of a Python UDF. Two input parameters are included in the code, but only one input parameter is included in the 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
-- The following sample code is the invalid code of another Python UDF. The self parameter is not included in the evaluate function.
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 sample code is the valid code of a 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はアクセスできません
サンプル
失敗: ODPS-0130071:[0,0] セマンティック分析例外-物理プランの生成に失敗しました: com.aliyun.odps.lot.cbo.plan.splitting.impl.vpc.AliHyperVpcRuntimeException: Vpcホワイトリスト: 、Vpc id: vpc-xxxxはアクセスできません。 アクセス許可vpc idリストを設定するには、プロジェクト所有者に連絡してください。=
説明
外部テーブルを使用してVPC内のサービスにアクセスすると、無効なVPC設定が原因でエラーメッセージが表示されます。
ソリューション
VPCでIPアドレスホワイトリストを設定し、MaxComputeがホワイトリストのIPアドレスからVPCのサービスにアクセスできるようにします。 詳細については、「ネットワーク接続プロセス」の「VPC経由のアクセス (専用接続) 」セクションをご参照ください。
エラーメッセージ14: セマンティック分析例外-物理プランの生成に失敗しました:
Sample
失敗: ODPS-0130071:[0,0] セマンティック分析例外-物理プランの生成に失敗しました: com.aliyun.odps.com mon.table.na.NativeException: kNotFound: HOLO認証サービスに提供していないrole_arnが存在します。 注意深く確認してください。
説明
Alibaba Cloudサービスにアクセスすると、サービスにリンクされているサービスにリンクされたロール (SLR) はAlibaba Cloudアカウントに割り当てられません。 そのため、SLRを使用してサービスのデータにアクセスすることはできません。
ソリューション
こちらをクリックして、SLRをAlibaba Cloudアカウントに割り当てます。