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

MaxCompute:SQL 全般に関するよくある質問

最終更新日:Jul 11, 2026

MaxCompute で SQL ステートメントを実行する際の、データ型、SQL の制限、その他のトピックに関するよくある質問です。

カテゴリ

よくある質問

データ型

SQL の制限

SQL ジョブの実行

SQL ジョブのモニタリング

SQL ジョブの最適化

SQL ジョブの実行が遅いです。最適化するには、どうすればよいですか。

MaxCompute の時間関連フィールドに、時刻なしで日付を格納できますか。

はい。DATE データ型を使用します。この型を使用するには、MaxCompute V2.0 データ型を有効にする必要があります。詳細については、「2.0 データ型バージョン」をご参照ください。

MaxCompute の SQL ステートメントで 2 つの DOUBLE 値が等しいかどうかを比較すると、予期しない結果が返されるのはなぜですか。

MaxCompute の DOUBLE データ型は精度誤差の影響を受けます。等号 (=) を使用して 2 つの DOUBLE 値を直接比較しないでください。

代わりに、一方の値からもう一方の値を減算し、その絶対差が等しいと見なせるほど小さいかどうかを確認してください。

DECIMAL データ型の精度オーバーフローエラーを解決するには、どうすればよいですか。

セッションレベルで set odps.sql.decimal.odps2=true; コマンドを実行して、MaxCompute V2.0 データ型のサポートを有効にできます。MaxCompute の DECIMAL データ型の最大精度は 38 桁です。最大精度でデータを格納すると、処理中にオーバーフローエラーが発生しやすくなります。可能な場合は、より小さい精度を使用してください。

新しく作成された MaxCompute プロジェクトは、暗黙的なデータ型変換をサポートしていません。これを解決するには、どうすればよいですか。

MaxCompute V2.0 データ型のサポートを無効にすると、暗黙的な変換が許可されます。詳細については、「データ型変換」をご参照ください。

データをクエリすると、「XXX type is not enabled in current mode」というエラーメッセージが表示されます。これを解決するには、どうすればよいですか。

セッションレベルで set odps.sql.decimal.odps2=true; コマンドを実行して、MaxCompute V2.0 データ型のサポートを有効にできます。

単一フィールドの 8 MB 制限に対処するには、どうすればよいですか。

MaxCompute テーブルの単一フィールドは 8 MB を超えることはできません。フィールドがこの制限を超える場合は、ビジネスニーズに基づいて複数の小さなフィールドに分割してください。

複雑な構造を持つ大きなフィールドは、計算パフォーマンスを低下させる可能性があります。これを回避するには、データウェアハウスの標準に従ってデータアーキテクチャを設計してください。

  • 複雑な構造を持つ生データを、オペレーショナルデータストア (ODS) 層に圧縮形式でアーカイブしてください。

  • ODS 層の増分データを定期的に (たとえば、毎日) クリーンアップしてください。複雑なフィールドを複数の単純なフィールドに分割し、分析しやすいように共通データモデル (CDM) 層のテーブルに格納してください。

MaxCompute の SQL ステートメントを実行すると、「partitions exceeds the specified limit」というエラーメッセージが表示されます。これを解決するには、どうすればよいですか。

  • 現象:

    MaxCompute の SQL ステートメントを実行すると、次のエラーメッセージが返されます。

    FAILED: ODPS-0010000:System internal error - OTS filtering exception - Ots read range partitions exceeds the specified limit:10000:   tableName:xxxx , please check hive conf key
  • 原因:

    1 つの MaxCompute テーブルは最大 60,000 のパーティションをサポートしますが、1 回のクエリでアクセスできるのは最大 10,000 パーティションです。このエラーは、次の理由で発生する可能性があります。

    • 原因 1:パーティション条件を指定しなかった。

    • 原因 2:ユーザー ID などのフィールドをパーティションフィールドとして使用したため、パーティション数が過剰になった。

  • 解決策:

    • 原因 1 の解決策:パーティション条件を指定しなかった場合は、追加してください。

    • 原因 2 の解決策:パーティションキー列が不適切で、パーティション数が過剰になる原因となっている場合は、パーティションキー列の変更を検討してください。

MaxCompute の SQL ステートメントを非対話形式で実行するには、どうすればよいですか。

シェルを使用して、MaxCompute の SQL ステートメントを非対話形式で実行できます。

  • odps -f filename コマンドを使用して、SQL ファイルを読み込んで処理します。

    SQL ステートメントを実行する場合、filename ファイルの最初の行は、SQL モードを示す SQL である必要があります。

    SQL
    
      select ... from table_name where xxx;                
  • 単一の SQL ステートメントを実行するには、MaxCompute SQL で sqltext メソッドを使用します。

    ./odpscmd -e "select * from dual;"             

    詳細については、odps -help を実行してください。

SQL を使用して、MaxCompute の設定を別の Alibaba Cloud アカウントに転送できますか。

はい。パッケージメソッドを使用してください。詳細については、「MaxComputeでの複数チームによる共同データ開発とプロジェクト管理のベストプラクティス」をご参照ください。

開発環境から本番環境にテーブルデータを同期するには、どうすればよいですか。

MaxCompute クライアントで次のコマンドを実行してください。

insert into project.table select * from project_dev.table;

本番テーブルに対する読み取りおよび書き込み権限がない場合は、アカウントに必要な権限を付与してください。詳細については、「MaxComputeの権限」をご参照ください。

フィールドが空かどうかを確認するには、どうすればよいですか。

MaxCompute SQL の演算子を使用して、フィールドが空かどうかを確認してください。詳細については、「演算子」をご参照ください。

DataWorks のシェルノードから MaxCompute SQL を呼び出すことはできますか。

いいえ。シェルノードは標準のシェル構文のみをサポートし、対話型構文はサポートしていません。複数のジョブを実行するには、代わりに ODPS SQL ノードを使用してください。詳細については、「ODPS SQL タスクの開発」をご参照ください。

SQL でループを実装するには、どうすればよいですか。

DataWorks の do-while ノードを使用してください。

SQL で代入ノードを呼び出すには、どうすればよいですか。

DataWorks では、代入の機能は for-each ノードで実装されます。このノードを使用してください。

特定の日に MaxCompute で実行されたすべての SQL ステートメントを表示するには、どうすればよいですか。

show p -all -limit <number>; コマンドを実行して、MaxCompute プロジェクトのすべてのメンバーの SQL 履歴を表示できます。詳細については、「インスタンス情報を表示する」をご参照ください。

SQL ジョブのリソース使用量を表示するには、どうすればよいですか。

SQL ジョブのリソース使用量は請求書で確認できます。詳細については、「MaxCompute請求書の使用詳細の分析」をご参照ください。

SQL ステートメントの実行コストを表示するには、どうすればよいですか。

cost sql コマンドを使用して、クエリコストを見積もることができます。詳細については、「計測と見積もり」をご参照ください。

SQL ジョブの実行が遅いです。最適化するには、どうすればよいですか。

Logview を使用して、遅い SQL ジョブの原因を特定してください。詳細については、「Logviewベースの診断プラクティス」をご参照ください。

SQL ジョブの最適化の詳細については、「計算の最適化に関するベストプラクティス」をご参照ください。