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

AnalyticDB:書き込みとクエリ

最終更新日:Jun 24, 2024

このトピックでは、AnalyticDB for MySQLの書き込みとクエリに関するよくある質問に対する回答を提供します。

説明

質問でエディションが指定されていない場合、質問はAnalyticDB for MySQL Data Warehouse edition (V3.0) クラスターにのみ適用されます。

FAQの概要

JDBCを使用してAnalyticDB for MySQL data Lakehouse Edition (V3.0) クラスターのHudiテーブルのデータをクエリできますか?

はい。JDBCを使用してHudiテーブルのデータを照会できます。 Data Lakehouse Edition (V3.0) クラスターでHudiテーブルを作成した後、JDBCを使用してHudiテーブルのデータを照会できます。

Data Lakehouse Edition (V3.0) クラスターを使用して、OSSに保存されているHudiテーブルのデータを読み取ることはできますか?

はい。外部テーブルを使用して、OSSに保存されているHudiテーブルのデータを読み取ることができます。 詳細については、「外部テーブルを使用してdata Lakehouse Editionにデータをインポートする」をご参照ください。

Data Lakehouse Edition (V3.0) クラスターは、XIHE MPPジョブとXIHE BSPジョブを自動的に切り替えることができますか。

ジョブを送信するときは、対話型リソースグループまたはジョブリソースグループを指定して、ジョブがXIHE MPPジョブかXIHE BSPジョブかを判断する必要があります。

Data Lakehouse Edition (V3.0) クラスターでジョブを実行するには、XIHE MPPとXIHE BSPを選択する方法を教えてください。

デフォルトでは、XIHE BSPは非同期でジョブを送信します。 同期送信と非同期送信の唯一の違いは、クライアントがクエリの実行が完了するのを待つ必要があるかどうかです。

非同期送信には次の制限が課されます。

  • 結果セットには、最大10,000行のデータを含めることができます。

  • システムは、CSVファイルのダウンロードURLを含む最大1,000の結果セットを最大30日間保持できます。

大量の計算能力を消費し、完了までに長時間を要するが、少数の結果セットを返すクエリに対しては、BSPジョブを非同期に送信することをお勧めします。 例: INSERT INTO SELECTINSERT OVERWRITE SELECT、およびCREATE TABLE AS SELECT

Data Lakehouse Edition (V3.0) クラスターでXIHE BSPジョブのステータスを確認する方法を教えてください。

  • ジョブエディターを使用してData Lakehouse Edition (V3.0) クラスターでXIHE BSPジョブを送信する場合は、[ジョブエディター] > [SQL開発] を選択し、実行レコード タブをクリックしてジョブのステータスを表示します。

  • ジョブエディターを使用せずにXIHE BSPジョブを送信する場合、次のステートメントを実行して、内部メモリテーブルからジョブのステータスを照会できます。

    SELECTステータスFROM information_schema.kepler_meta_elastic_job_list WHERE process_id='<job_id>';

    次のステートメントを実行して、XIHE BSPジョブに関するステータス統計を照会できます。

    SELECTステータス, count(*) FROM information_schema.kepler_meta_elastic_job_list GROUP BYステータス;

SQLジョブ間の相互影響を減らすためにリソースを分離するにはどうすればよいですか?

AnalyticDB for MySQL Data Warehouse Edition (V3.0) クラスターは、クラスターエディションおよびData Lakehouse Edition (V3.0) クラスターのエラスティックモードでリソースグループ機能を提供します。 詳細については、「リソースグループの概要 (Data Warehouse Edition) 」および「リソースグループの概要 (Data Lakehouse Edition) 」をご参照ください。 さまざまな種類のリソースグループを作成し、対応するリソースグループにSQLジョブを送信してリソースを分離できます。

IN演算子に多数の条件が指定されている場合はどうすればよいですか?

AnalyticDB for MySQLは、IN演算子に指定できる条件の数に制限を課します。 デフォルト値は2000です。 ビジネス要件に基づいて値を変更できます。

説明

パフォーマンスを確保するために、IN演算子に5,000を超える条件を指定しないでください。

たとえば、次のステートメントを実行して、IN演算子の条件数を3000に設定します。

SET ADB_CONFIG max_in_items_count=3000;

「クエリが最大時間制限を超えた1800000.00ms」エラーが報告された場合はどうすればよいですか?

AnalyticDB for MySQLでは、SQLクエリのタイムアウト期間を設定できます。 クエリの実行が1,800,000ミリ秒後に終了しない場合、前述のエラーが報告されます。 次のステートメントを実行して、クラスター内の単一のクエリまたはすべてのクエリのタイムアウト期間を設定できます。

  • 単一のクエリの場合:

    /* + QUERY_TIMEOUT=xxx */SELECT count(*) FROM t;
  • クラスター内のすべてのクエリの場合:

    SET ADB_CONFIG QUERY_TIMEOUT=xxx;

    詳細については、「設定およびヒント設定パラメーター」をご参照ください。

マルチステートメント機能を使用して複数のSQLステートメントを連続して実行するときに、"multi-statement be found" エラーが報告された場合はどうすればよいですか?

V3.1.9.3以降のAnalyticDB for MySQLクラスターのみがマルチステートメント機能をサポートしています。 クラスターのマイナーバージョンが要件を満たしているかどうかを確認する必要があります。 マイナーバージョンが3.1.9.3より前の場合は、テクニカルサポートにお問い合わせください。 マイナーバージョンが3.1.9.3以降であるが、エラーが続く場合、クライアントでマルチステートメント機能が無効になる可能性があります。

MySQL JDBCクライアントを使用してAnalyticDB for MySQLクラスターに接続する場合、SET ADB_CONFIG ALLOW_MULTI_QUERIES=true; ステートメントを実行してマルチステートメント機能を有効にし、allowMultiQueriesプロパティをtrueに設定する必要があります。

クエリ結果に切り捨て時間が含まれている場合はどうすればよいですか?

クエリ結果に含まれる時間がMySQLクライアントで期待どおりに表示されるかどうかを確認します。 時間が期待どおりに表示される場合は、クエリ結果が他のクライアントによって処理されるかどうかを確認します。

組み込みのAES_ENCRYPT() 関数でエラーが発生した場合はどうすればよいですか?

次のステートメントを実行するとエラーが発生することがあります。

SELECT CONVERT(AES_DECRYPT(AES_ENCRYPT('ABC123','key_string')),'key_string'),char(10);

この場合、AES_ENCRYPT(NCRYPT (varbinary x, varchar y) ステートメントのxパラメーターをVARBINARY型に変更する必要があります。 例:

SELECT CONVERT(AES_DECRYPT(AES_ENCRYPT(CAST('ABC123' AS VARBINARY)) 、'key_string')) 、'key_string') 、char(10);

クエリ結果が突然変わるのはなぜですか?

データが更新されていない場合、次の理由によりクエリ結果が突然変化する可能性があります。

  • ORDER BY句はLIMIT句と共に使用されません。 AnalyticDB for MySQLは分散アーキテクチャを使用します。 クエリが複数のスレッドを使用する場合、返される行の数がLIMIT句で指定された値に達すると、クエリは終了します。 したがって、ORDER BY句がLIMIT句と一緒に使用されていない場合、クエリ結果はランダムな順序で返されます。

  • GROUP BY句と集計関数を使用するSELECTステートメントでは、GROUP BY句と集計関数に特定のフィールドが含まれていない場合、そのフィールドに対してランダムな値が返されます。

この問題が解決しない場合は、テクニカルサポートにお問い合わせください。

実行計画内のすべてのテーブルのスキャン行数が、クエリによってスキャンされる行の総数と異なるのはなぜですか。

ほとんどの場合、この問題はレプリケートされたテーブルによって発生します。 AnalyticDB for MySQLは、各シャードにレプリケートされたテーブルを保存し、レプリケートされたテーブルがスキャンされるときに行数を繰り返しカウントします。

プライマリキーを持たないAnalyticDB for MySQLテーブルでINSERT OVERWRITEステートメントを使用すると、データが複製されるのはなぜですか。

プライマリキーがないAnalyticDB for MySQLテーブルでは、自動重複排除はサポートされていません。

SELECT * FROM TABLE GROUP BY KEYステートメントが実行されたときに、「GROUP BY句にない列 'XXX' 」エラーが発生するのはなぜですか。

GROUP BY句を使用する場合、クエリ結果はすべてのフィールドを表示できません。 ステートメントで列名を指定する必要があります。 サンプル文:

国からのSELEC T nation.name GROUP BY nation.nationkey

クエリ結果がJSON形式で返される場合、IN演算子に指定される値の数に制限がありますか?

V3.1.4以前のAnalyticDB For MySQLクラスターの場合、IN演算子に指定された値の数は16を超えることはできません。 V3.1.4以降のAnalyticDB For MySQLクラスターの場合、IN演算子に指定される値の数に制限はありません。 クラスターのマイナーバージョンを照会する方法の詳細については、「購入、構成変更、およびアップグレード」トピックの「AnalyticDB For MySQLクラスターのマイナーバージョンを照会する方法」をご参照ください。

使用できますか。AnalyticDB for MySQLの外部テーブルデータソースとしてOSSからのcsv.gzファイル?

はい、使用できます。AnalyticDB for MySQLの外部テーブルデータソースとしてのcsv.gzファイル。 外部テーブルの場合、compress_typeパラメーターをgzipに設定する必要があります。 OSS外部テーブルの構文については、「data Warehouse Editionにデータをインポートするための外部テーブルの使用」トピックの「パーティション分割されていないオブジェクトのOSS外部テーブルの作成」をご参照ください。

INSERT ON DUPLICATE KEY UPDATEステートメントはAnalyticDB for MySQLでサポートされていますか?

はい。AnalyticDB for MySQLでは、INSERT ON DUPLICATE KEY UPDATEステートメントがサポートされています。 ただし、AnalyticDB for MySQLでは、INSERT ON DUPLICATE KEY UPDATEステートメントの変数に値のみを割り当てることができます。 このステートメントで式を割り当てることはできません。

AnalyticDB for MySQLのUPDATEステートメントでJOINを使用できますか?

UPDATEステートメントでJOINを使用できるのは、V3.1.6.4以降のAnalyticDB for MySQLクラスターのみです。 詳細については、「UPDATE」をご参照ください。

AnalyticDB for MySQLでSQL変数を設定できますか?

いいえ。AnalyticDB for MySQLでSQL変数を設定することはできません。

INSERT ON DUPLICATE KEY UPDATEステートメントを実行して、Logstashプラグインを使用してデータを一括挿入できますか?

はい。INSERT ON DUPLICATE KEY UPDATEステートメントを実行して、データを一括挿入できます。 INSERT ON DUPLICATE KEY UPDATEステートメントを実行してデータを一括挿入する場合、最後のVALUES() の後にON DUPLICATE KEY UPDATE句を追加する必要があります。

たとえば、次のステートメントを実行して、student_courseテーブルに3行のデータを挿入します。

INSERT INTO student_course('id' 、'user_id' 、'nc_id' 、'nc_user_id '、'nc_commodity_id' 、'course_no' 、'course_name' 、'business_id')
値 (277943、11056941、'1001EE1000000043G2T5' 、'1001EE1000000043G2TO' 、'1001A5100000003YABO2 '、'kckm303' 、'Industrial Accounting Practice V9.0--77 '、'kuaiji') 、(277944、11056943、'1001EE1000000043G2T5' 、'1001EE1000000043G2TO' 、'1001A5100000003YABO2 '、'kckm303' 、'Industrial Accounting Practice V9.0--88 '、'kuaiji') 、(277945、11056944、'1001EE1000000043G2T5' 、'1001EE1000000043G2TO' 、'1001A5100000003YABO2 '、'kckm303' 、'Industrial Accounting Practice V9.0--99 '、'kuaiji')
複製キーの更新について
course_name = '産業会計実践V9.0--77' 、business_id = 'kuaiji'; 

AnalyticDB for MySQLクラスターが組み込みデータセットをロードするための条件は何ですか?

組み込みデータセットをロードするには、AnalyticDB for MySQLクラスターに、少なくとも24のAnalyticDBコンピューティングユニット (ACU) の予約済みストレージリソースと少なくとも16のコンピューティング予約済みリソースがuser_defaultリソースグループに含まれている必要があります。

組み込みデータセットがAnalyticDB for MySQLクラスターにロードされているかどうかを確認するにはどうすればよいですか?

AnalyticDB for MySQLクラスターの左側のナビゲーションウィンドウで、[ジョブの開発] > [SQLの開発] を選択します。 表示されるページで、読み込みの進行状況を表示できます。 1アイコンが 組み込みデータセットの読み込み ボタンの前に表示され、[データベースとテーブル] タブにADB_SampleData_TPCHデータベースとデータベースのテーブルが表示されると、組み込みデータセットが読み込まれます。

読み込み失敗または読み込みの延長を示すエラーメッセージがシステムから返された場合はどうすればよいですか?

DROP TABLE table_name; ステートメントを実行して、ADB_SampleData_TPCHデータベースからすべてのテーブルを削除します。 次に、DROP DATABASE ADB_SampleData_TPCH; ステートメントを実行して、ADB_SampleData_TPCHデータベースを削除します。 ADB_SampleData_TPCHデータベースが削除されたら、組み込みデータセットをリロードします。

標準データベースアカウントを使用して組み込みデータセット機能を使用するにはどうすればよいですか?

組み込みデータセット機能は、AnalyticDB for MySQLの権限管理ルールに準拠しています。 クラスターに組み込みデータセットがロードされている場合でも、標準データベースアカウントにはADB_SampleData_TPCHデータベースに対する権限がありません。 特権アカウントを使用して、次のステートメントを使用して標準アカウントに権限を付与する必要があります。

GRANT select ON ADB_SampleData_TPCH.* TO <user_name>;

組み込みデータセットをロードした後、AnalyticDB for MySQLクラスターをテストするにはどうすればよいですか?

AnalyticDB for MySQLは、クラスターのテストに使用できる対応するクエリスクリプトを提供します。 組み込みデータセットが読み込まれたら、[ジョブの開発]> [SQLの開発] を選択し、[スクリプト] タブをクリックしてSQL文を実行します。 SQL文の詳細については、「TPC-Hデータセット」をご参照ください。

重要

組み込みデータセットの整合性を確保するために、ADB_SampleData_TPCHデータベースでSELECTステートメントのみを実行することを推奨します。 他のDMLまたはDDLステートメントを実行すると、組み込みデータセットのデータが変更され、データセットの読み込みに失敗する可能性があります。 この場合、ADB_SampleData_TPCHデータベースを削除し、データセットをリロードする必要があります。