SQL Error
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がそのノードにハートビート情報を送信した後、ノードがハートビート情報に含まれるcluster idがローカルに保存されているcluster 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モデルのクエリ結果が一致しない
一部のケースでは、ユーザーがUnique Keyモデルのテーブルに対して同じSQLを使用してクエリする際、複数回のクエリの結果が一致しない場合があります。そしてクエリ結果は常に2-3種類の間で変化します。
これは、同じバッチのインポートデータ内に、同じキーでも異なる値を持つデータがあるためと考えられ、データ上書きのシーケンスの不確実性により、異なるレプリカ間で一致しない結果が生じます。
たとえば、テーブルがk1、v1として定義されているとします。インポートされたデータのバッチは以下の通りです:
1, "abc"
1, "def"
その場合、copy 1の結果は1, "abc"で、copy 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ノードを再起動します。