SQL エラー
Q1. Show backends/frontends で表示される情報が不完全
show backends/frontends などの特定のステートメントを実行した後、結果の一部の列が不完全である場合があります。例えば、show backends の結果でディスク容量情報が表示されないことがあります。
通常、この問題はクラスターに複数の FE がある場合に発生します。ユーザーが非 Master FE ノードに接続してこれらのステートメントを実行すると、不完全な情報が表示されます。これは、一部の情報が Master FE ノードにのみ存在するためです。例えば、BE のディスク使用量情報などです。そのため、Master FE に直接接続した後でのみ完全な情報を取得できます。
もちろん、ユーザーはこれらのステートメントを実行する前に set forward_to_master=true; を実行することもできます。セッション変数が true に設定された後、その後に実行される一部の情報表示ステートメントは、結果を取得するために自動的に Master FE に転送されます。このように、ユーザーがどの FE に接続していても、完全な結果を取得できます。
Q2. invalid cluster id: xxxx
このエラーは、show backends または show frontends コマンドの結果に表示される場合があります。通常、FE または BE ノードのエラーメッセージ列に表示されます。このエラーの意味は、Master FE がノードにハートビート情報を送信した後、ノードがハートビート情報に含まれるクラスター ID がローカルに保存されているクラスター ID と異なることを発見し、ハートビートへの応答を拒否することです。
Doris の Master FE ノードは、各 FE または BE ノードに積極的にハートビートを送信し、ハートビート情報に cluster_id を含めます。cluster_id は、クラスターが初期化されるときに Master FE によって生成される一意のクラスター ID です。FE または BE が初めてハートビート情報を受信すると、cluster_id はファイルの形でローカルに保存されます。FE のファイルはメタデータディレクトリの image/ ディレクトリにあり、BE はすべてのデータディレクトリに cluster_id ファイルを持ちます。その後、ノードがハートビートを受信するたびに、ローカルの cluster_id の内容とハートビート内の内容を比較します。一致しない場合は、ハートビートへの応答を拒否します。
このメカニズムは、クラスター外のノードから送信される偽のハートビートメッセージの受信を防ぐためのノード認証メカニズムです。
このエラーから回復する必要がある場合。最初に行うべきことは、すべてのノードが正しいクラスターにあることを確認することです。その後、FE ノードについては、メタデータディレクトリの image/VERSION ファイル内の cluster_id 値を変更して FE を再起動してみることができます。BE ノードについては、データディレクトリ内のすべての cluster_id ファイルを削除して BE を再起動することができます。
Q3. Unique Key モデルのクエリ結果が一致しない
場合によっては、ユーザーが同じ SQL を使用して Unique Key モデルのテーブルをクエリするときに、複数のクエリの結果が一致しない場合があります。そして、クエリ結果は常に 2-3 種類の間で変化します。
これは、同じバッチのインポートデータに、同じキーを持つが異なる値を持つデータがあるためで、データの上書きシーケンスの不確実性により、異なるレプリカ間で一致しない結果につながる可能性があります。
例えば、テーブルが k1, v1 として定義されているとします。インポートデータのバッチは以下の通りです:
1, "abc"
1, "def"
この場合、コピー1の結果が 1, "abc" で、コピー2の結果が 1, "def" になる可能性があります。結果として、クエリ結果に一貫性がありません。
異なるレプリカ間でデータシーケンスが一意であることを保証するには、Sequence Column機能を参照してください。
Q4. bitmap/hll型データのクエリでNULLが返される問題
バージョン1.1.xにおいて、ベクトル化が有効で、クエリデータテーブルのbitmap型フィールドがNULL結果を返す場合:
- まず
set return_object_data_as_binary=true;を設定する必要があります - ベクトル化を無効にします
set enable_vectorized_engine=false; - SQLキャッシュを無効にします
set [global] enable_sql_cache = false;
これは、bitmap/hll型がベクトル化実行エンジンにおいて、入力がすべてNULLの場合、出力結果も0ではなくNULLになるためです。
Q5. bitmap/hll型データのクエリでNULLが返される問題
バージョン1.1.xにおいて、ベクトル化が有効で、クエリデータテーブルのbitmp型フィールドがNULL結果を返す場合:
- まず
set return_object_data_as_binary=true;を設定する必要があります - ベクトル化を無効にします
set enable_vectorized_engine=false; - SQLキャッシュを無効にします
set [global] enable_sql_cache = false;
これは、bitmap/hll型がベクトル化実行エンジンにおいて、入力がすべてNULLの場合、出力結果も0ではなくNULLになるためです。
Q6. オブジェクトストレージアクセス時のエラー: curl 77: Problem with the SSL CA cert
be.INFOログに curl 77: Problem with the SSL CA cert エラーが表示される場合は、以下の方法で解決を試すことができます:
- https://curl.se/docs/caextract.htmlで証明書をダウンロード:cacert.pem
- 証明書を指定された場所にコピー:
sudo cp /tmp/cacert.pem /etc/ssl/certs/ca-certificates.crt - BEノードを再起動
Q7. インポートエラー:"Message": "[INTERNAL_ERROR]single replica load is disabled on BE."
- be.confのパラメータ
enable_single_replica_loadがtrueに設定されていることを確認してください - BEノードを再起動してください