SQL クエリ
このトピックでは、SQL に関するよくある質問への回答を提供します。
マテリアライズドビューを構築する際に "fail to allocate memory." というエラーが発生する
この問題を解決するには、be.conf ファイル内の memory_limitation_per_thread_for_schema_change パラメータの値を増やします。このパラメータは、スキームを変更するために単一のタスクに割り当てられる最大ストレージを指します。デフォルトの最大ストレージ値は 2 GB です。
StarRocks はクエリ結果のキャッシュをサポートしていますか?
StarRocks は直接的に最終クエリ結果をキャッシュしません。v2.5 以降、StarRocks は Query Cache 機能を使用して、キャッシュ内の第一段階の集約の中間結果を保存します。以前のクエリと意味的に同等の新しいクエリは、キャッシュされた計算結果を再利用して計算を高速化できます。Query Cache は BE メモリを使用します。詳細は Query cache を参照してください。
Null が計算に含まれる場合、ISNULL() 関数を除いて、関数の計算結果は false になる
標準 SQL では、NULL 値を持つオペランドを含むすべての計算は NULL を返します。
StarRocks は DECODE 関数をサポートしていますか?
StarRocks は Oracle データベースの DECODE 関数をサポートしていません。StarRocks は MySQL と互換性があるため、CASE WHEN ステートメントを使用できます。
StarRocks の主キーテーブルにデータがロードされた後、最新のデータをすぐにクエリできますか?
はい。StarRocks は Google Mesa を参考にしてデータをマージします。StarRocks では、BE がデ ータマージをトリガーし、データをマージするための 2 種類の Compaction があります。データマージが完了していない場合、クエリ中に完了します。したがって、データロード後に最新のデータを読み取ることができます。
StarRocks に保存された utf8mb4 文字は切り捨てられたり、文字化けしたりしますか?
いいえ。
alter table コマンドを実行すると "table's state is not normal" というエラーが発生する
このエラーは、前回の変更が完了していないために発生します。前回の変更のステータスを確認するには、次のコードを実行します。
show tablet from lineitem where State="ALTER";
変更操作にかかる時間はデータ量に関連しています。一般的に、変更は数分で完了します。テーブルを変更している間は、データロードが変更の完了速度を低下させるため、StarRocks へのデータロードを停止することをお勧めします。
Apache Hive の外部テーブルをクエリすると "get partition detail failed: org.apache.doris.common.DdlException: get hive partition meta data failed: java.net.UnknownHostException:hadooptest" というエラーが発生する
このエラーは、Apache Hive パーティションのメタデータを取得できない場合に発生します。この問題を解決するには、core-sit.xml と hdfs-site.xml を fe.conf ファイルと be.conf ファイルにコピーします。
データをクエリすると "planner use long time 3000 remaining task num 1" というエラーが発生する
このエラーは通常、完全なガベジコレクション(フル GC)によって発生します。バックエンドのモニタリングと fe.gc ログを使用して確認できます。この問題を解決するには、次の操作のいずれかを実行します。
- SQL のクライアントが複数のフロントエンド (FEs) に同時にアクセスできるようにして、負荷を分散します。
- Java Virtual Machine (JVM) のヒープサイズを fe.conf ファイルで 8 GB から 16 GB に変更して、メモリを増やし、フル GC の影響を軽減します。
列 A の基数が小さい場合、select B from tbl order by A limit 10 のクエリ結果が毎回異なる
SQL は列 A が順序付けられていることのみを保証でき、列 B の順序が各クエリで同じであることを保証できません。MySQL はスタンドアロンデータベースであるため、列 A と列 B の順序を保証できます。
StarRocks は分散データベースであり、基礎となるテーブルに保存されたデータはシャーディングパターンで配置されています。列 A のデータは複数のマシンに分散されているため、複数のマシンによって返される列 B の順序は各クエリで異なる場合があり、B の順序が毎回異なる結果になります。この問題を解決するには、select B from tbl order by A limit 10 を select B from tbl order by A,B limit 10 に変更します。