Apache Doris 高性能 Open Lake Variant 读写报报解析(含名电合後) – SelectDB
ガイド:Apache ドリス 5.0 プレビュー(5)|技術解言篇:ログ、イベント、AI呼び出しなど、常に変化する半構造化データに直面して、柔軟な構造を維持するだけでなく、高い効率性を実現するにはどうすればよいでしょうか? 19.14 倍; 列ケース熱伝導結果部 58.64 倍 58.64 倍 パッド熱伝導パッド 106 倍。
作宇:李文强,SelectDB 多模湖坛 担当者
一、バリエーション: 保持タイプによってデータを変更する
一事表,今天多了设计计,星上下下下下モデル呼び出し情報;下載 amount,記録にはデジタルなものもあれば、文字列のものもあります。このタイプのデータは変更せずに保存する必要があります。このタイプのデータは変更せずに保存できます。
Doris 4.2 電子版、Iceberg と Paimon のバリアントからユーザーはレイクテーブル内の半構造化データを直接クエリし、ネストされたフィールドに従ってフィルタリングし、コンピュータシステムを読み取って最適化することができます。
バリアントの理解には、次の 3 つのレベルに従う必要があります。これらの値を表現する方法,これらの値を保存する方法をドキュメント,これらの値をどのように表現しますか?。
このバリアントは、ログ コンテキスト、ビジネス イベント拡張属性、デバイス パラメーターに加え、AI アプリケーションの通話情報、評価属性などの半構造化コンテンツの保存に適しています。異なるレコードには異なるフィールドを含めることができ、同じパスに異なるタイプの値を保存できます。
初めに、全体のデザインを画像と一緒にご覧いただくことをお勧めします。 events イベント表、これら id BIGINT 和 payload VARIANT 两列:id イベント番号を保存し、payload イベントの拡張コンテンツを保存します。ペイロード最作文件在線上電影電影の列名,VARIANT 手机事列交品制造分;この列名も変更できます attributes または別の名前。
一行の payload バリアント値に対応します。この値は数値、文字列などにすることができます。また、「フィールド名 → 子の値」で構成されるオブジェクト、「フィールド名 → 子の値」で構成されるオブジェクト、または複数の要素で構成される配列にすることもできます。オブジェクトと配列を再度ネストすることもできます。 payload 值; 実際のストレージはバイナリ コードを使用しており、第 2 章はさらに拡張される可能性があります。
たとえば、次の 2 つの論理値が同じ列に出現する可能性があります。
{"region":"west","amount":120,"device":{"os":"linux"}}
{"region":"east","amount":"unknown","tags":["new","app"]}
最初の行の根值はオブジェクトです:region 対応する文字列 "west"、amount 対応する番号 120、device そのうちのネストされたオブジェクトに対応します os 対応する文字列 "linux"2行目はありません device、フィールドの数を増やしました tags,今掴 amount 文字列として保存します。これらの違いは、値が異なる同じ列内で発生します。

図 1 | テーブル内の安全なペイロード列から、統合バリアント アセンブリのイメージが表示されます。
後の文 payload['region'] これは阿列画像中からのテイクアウトです region 分野、payload['device']['os'] 则油 device → os たとえば、次のようになります。 CAST(payload['device']['os'] AS STRING)、結果は文字列です linux。列名、品行论および対象タイプ分電視” 从哪一列を取る、どれを取る、按什么硱カテゴリの答え」。
新しい属性を一度実装するたびにテーブル構造を変更する必要はありません。 120 和文字列 "120" 依然として異なる値が存在しており、検索時に期待される種類と異常値の処理方法を明確にする必要があります。
実際には、ビジネスのメインキー、イベント時刻、パーティションフィールドなどの安定した属性を通常の列に配置し、継続的に変化する拡張属性をバリアントに配置できます。したがって、安定したフィールドはパーティション化と関連付けに便利であり、拡張フィールドはスペース用に予約されています。
二、ストレージとエンコーディングのバリエーション
2.1 メタデータと値:ハンドル报报と安全在在了少里
バリアント未拆列的、通常は metadata 和 value 2 つの部分の共有式:
| 構成 | 何を保存するか | なぜ便利なのでしょうか? |
|---|---|---|
| メタデータ | 全部头、图天名字典及び第一个方法 | オブジェクトはフィールド名番号を引用符で囲むことができ、読み取り時間は複製できます |
| 価値 | 安全手机、金量内容、公司または样地技術および出版 | 型を保持し、値のバイナリ フラグメントを見つけます。 |
ここでのメタデータはコードの一部であり、カタログ内のテーブル データは同じ概念ではありません。オブジェクトは、フィールドの名前番号、オフセット、および組織コンテンツのサブ値を渡します。配列は、位置決めコンテンツの要素オフセットを渡します。スケールはコードの独自のタイプに従っています。 Doris はフィールドをバイナリ形式で表示できるため、JSON 文字列に変換する必要はありません。
しかし、バイナリは、保存されているオブジェクトと等しくないフィールドをすばやく見つけます。このフィールドのフィールドを読み取るだけです。複数のフィールドが同じバイナリ ファイル内に存在する場合、実際の I/O は I/O のレイアウトの影響を受けます。
2.2 シュレッディング: 把选定电影技在有电影电影列
シュレッディング可電影の按電影列:可可取 region 拆成電影列,把 amount これらは、Parquet の配列コード、圧縮および統計情報として使用できます。
予期しないフィールドや、選択した物理タイプと一致しない値は、残りのバイナリ値であっても、残差に保持される可能性があります。 amount 文字列です "unknown",他のレコードのフィールドが整数列に分割されているため、この値を破棄できません。
前に amount ドキュメントがライターによって作成された場合、フィールドはライターによって選択されます。
| オブジェクトの合計 | 安全子列 typed_value | 代替バイナリ: 値 |
|---|---|---|
| 120番 | 120 | なし |
| 文字列「不明」 | なし | 電気的コードの亜種 |
| ヌル表示 | なし | バリアント null のすべて |
| フィールドが存在しません | なし | なし |
バリアント null payload 自己はオブジェクトであり、オブジェクト内のフィールドが議論されます。拆列不了拉列分的实方,拆列不了电影的電影的ストーリー情下載列 is nullリーダーは、フォールバックおよび電子機器の特性を兼ね備えた会話と組み合わせる必要があります。
残差はバイナリ コンテンツの残差であり、フォールバックは入力時にソースから取得できない特定のパスを強調します。これらは、1 つの大きなオブジェクト内ではなく、さまざまなネストされたレイヤー レベルに表示されます。 payload VARIANT。

図 2 | 2 種類の物理レイアウトの変形: 未列の場合は既存の列に、列の場合はテン列と残りの値が共用される設計。
同じテーブル内の異なるファイルは異なるパスに分割でき、分割された行と分割されていない行が同時に存在することもできます。
2.3 JSON と JSON の違い: タイプ、レイアウト、実行方法に注目
ドリスさん JSON バイナリJSONBの種類が表示されます。これは、以下のバイナリ JSON 表示です。
| 固さ | ドリス・JSONB | 文件他们的湖上の異形 |
|---|---|---|
| メインディスプレイ | バイナリ JSON ドキュメント | 带安全発行别值、レイアウトと組み合わせることができます |
| 表現の種類 | JSON のバイナリ表示の場合 | 10進数、日時、2進数などより多くの種類を表現できます |
| アクセスフィールド | バイナリドキュメント上のパスにアクセスします | バイナリパスポジショニング、または直接アクセスタイプ |
| 子列の最適化 | JSONB を使用した異なる自然出版電影 Parquet バリアントの子列 | 已拆出口设计可能以上列裁剪定および统计裁剪 |
| キーインタラクション | JSONB の理解性または変換 | コードの変種、表公開と各当制の共京手机 |
したがって、Variant の価値は「JSON を一種のコードに変換する」だけではありません。これは、型情報、オプションの列レイアウト、実行エンジンの計算能力を結び付けます。オリジナルのモデル交換、低頻度の取得値は JSON を使用できます。頻繁なパス フィルタリング、集計、読み取りおよび書き込み時にエンジンを通過するレイク、バリアントはさらに最適化を提供します。
このテキストは JSON データ変換に適していますが、デフォルトではすべての Variant 値の可逆交換方法とは見なされません。
三、一个 ドリスを処刑するためのバリアントクエリ
3.1 FE 計画: タイプ、パス、スキャン タスクの特定
ユーザーが SQL を送信した後は、FE が分析、分析、計画の実行を担当します。カタログ マッチング レイヤーは、Iceberg、Paimon、および識別できる論理タイプで識別できます。
ここでは、さまざまな最適化に関連する 2 つのカテゴリを示します。 普通列裁剪标準最好是电影 payload;南套设计裁剪电影可以必須 payload['region']、payload['amount']FE は、式から認識可能な定数パスを収集し、フィルタリング リクエストと投影リクエストを分離します。

図 3|Doris の全体的な実行フロー。FE はスキャンと実行タスクを計画し、BE シンクから次の実行計算を行い、結果をクエリして、ターゲット テーブルに書き込み、入力し、リンクをコミットします。
3.2 BE の実行: スキャン、式、分散計算
BE 以湖上でデータをスキャンし、ブロック バッチに複数のデータ列を含むように編成します。抽出、型変換、フィルタリング、集計、関連付けなどのパスは、計画の実装の計算で完了します。データ交換をノード間で実行する必要がある場合、Shimb によってさまざまな実行ステージに接続されます。フィルタリングが可能であり、集計も Shimb の両側に分散される可能性があり、概念的なフローを各クエリの固定シーケンスとして理解することはできません。
バリアントの場合、重要なのは、すべての計算でネストされたオブジェクトを完全に理解させることではなく、必要なパスを計算可能な列にし、同時に終了後に可能な限りオブジェクト全体を再構築することです。 SUM(amount)など、計算に含まれない多数の拡張フィールドをオブジェクトやテキストに繰り返し変換する必要はありません。
四、可読性が高い: ほとんど読む必要がなく、中間のオブジェクト構造がほとんどありません。
4.1 按文ファイルと行グループが投影範囲を決定する
以按地电影设计下載以下下載、设计下載 region 和 amount 寄木細工のスキャナー
-
それは十分に証明できる: 必要なタイプのセクションを読み取ります。
-
叶子列これ以上これらの设计:必要な残価を確保し、回収に参加します。
-
ローカル投影が完了したことを証明できません:完全な投影バリアントに戻ります。
これにより、クリッピングによってフィールドが失われないようにしながら、最適化をさまざまなファイル レイアウトに適応させることができます。

図 4 | 同じ最終的に以下にロードできるものは、電気的効果です: 直接多用途タイプの葉子、実行組み合わせクラスのフォールバック、非分割バイナリの位置決め。実際のニーズに応じて、完全なオブジェクトまたは複雑な構造を復元できます。
4.2 拆列电影:复用叶子、花齐残值、再安全裁剪
条件 1: ターゲット パスが互換性のあるタイプによって完全に提供されているリーダーは、ファイルの物理構造に沿ってターゲット パスを見つけ、関連するレイヤー レベルの有効性と残りの要件をチェックできます。 CAST 一部の部分は、正確な Variant 値に変換するために特別な物理言語の型のために予約する必要があり、完全なオブジェクトの再構築も回避できます。
二二:同じパスに異なるレコードがあるたとえば、最初のレコード amount=120 それは電影子列、第二条小列にあります。 amount="unknown" これはバイナリ フォールバックにあります。ドリス会逐次起样格ハンドマシンの説明の方法: パスのタイプは、葉子を取得した時点で完了します。ある層で残余値が必要な場合、層のバイナリ コンテンツを入力し、残りのパスの検索を続けます。最終的な組み合わせは、 amount この単一パスの結果、各行の元の値と型が保持されます。
ターゲット フィールドがまったく抽出されていない場合、Doris は、対応するオブジェクト レイヤ レベルの残りのメタデータを検索することもできます。したがって、「残留」とは「Variant 全体を再構築しなければならない」という意味ではありません。この最適化は主に、直接分析できるオブジェクト キー パスを目的としています。配列または複雑なサブツリーが高速パスの条件を満たしていない場合でも、実際のニーズに応じて対応する値を復元する必要があります。
これは、列裁剪と生性裁断の列の違いも説明します。前者は不必要な物理列を削減し、後者は不一致のデータ範囲をスキップします。代替案として
たとえばフィルタリング CAST(payload['amount'] AS BIGINT) > 1000ある行グループ内の型の最大値が 900 の場合、行グループの残りの値での変換は可能であり、スキップできます。オブジェクトキーのパス、定数の比較、型と並べ替え言語、変換セキュリティ、パスの末尾に代替値があるかどうかをチェックできます。ページインデックス 裁剪也には対応する学校の認証が必要です。
4.3 未拆列電影:直接測位とアニメーション用解析设计
三三:ドキュメントの撮影結果の子列、ターゲット値はメタデータ/エンコードされた値に存在する可能性がありますDoris が解析した天天名典典、再利用可能なインデックスを確立します。オブジェクト パスにアクセスするときに、天同名列の射程を先取りします。天名分の射程を先取りします。オブジェクト内のフィールド番号と位置決め子の値のオフセットを再結合し、ネストされたレイヤー レベルに沿って検索を続けます。JSON テキストはありません。
同じ辞書でボリュームを実行したり、電子ビデオをアプリケーションと組み合わせたりすることができます。 device.os 与 device.version 繰り返しの位置決めを減らすことができます device さんの作品です。配置されたパラメータについては、リーダーを後続の計算に適した列に編成できます。再度アクセスする必要があるツリーについては、予約することができ、完全なコンテンツが構築されます。
これらの最適化は主に CPU および中間オブジェクトへのアクセス領域を削減し、「Parquet 子列の独立読み取りによる I/O の削減」は別のメカニズムに属します。
五、高効率計算:結果をできるだけ早く抽出し、計算の種類を入力します
5.1 バリアント下降列、可用電子影最好最好的期間
ファイル内の物理レイアウトとメモリ内の計算は同じものではありません。
| 形状 | 予約されたコンテンツ | 適切な取り扱い |
|---|---|---|
| エンコードされた | メタデータ電子効果に非常に便利 | バイナリ値を保持し、パスの位置決めとシリアル化を実行します |
| タイピング | 可空の强开别校量列 | 少量のコンテンツは生成可能です |
| みじん切りにする | リーダー電影電影電影树、電影与子列 | 叶子列を直接利用して、按必要発行设计值 |
これらのフォームは実行層の表示方法であり、ユーザーに表示される論理タイプは依然としてバリアントです。フィルタリング、切り取り、選択は引き続きフォームを維持できます。読者がドキュメント全体を再構築する必要がない場合、読者は適切な型を直接提供できます。

図5|バリアント計算フロー: 異なる実行形式の接続を抽出するパス、変換出力パラメータのタイプ、フィルタリングと集計の使用; リクエストの完全なオブジェクトが必要なオブジェクトをトリガーします。
5.2 抽出パスから CAST へ、そして再びベクタリングへ
このクエリを参照してください
SELECT
CAST(payload['region'] AS STRING) AS region,
SUM(CAST(payload['amount'] AS BIGINT)) AS total_amount
FROM iceberg_catalog.demo.events
WHERE CAST(payload['amount'] AS BIGINT) >= 100
GROUP BY CAST(payload['region'] AS STRING);
わかりやすい 3 つのステップに分けることができます。
-
道を進みます: バリエーションより抜粋
region与amountすでにリーフのタイプを持っている場合は、それを再利用してみてください。そうでない場合は、バイナリ構造がそれに応じて配置されます。 -
タイプ:
CAST結果を必要な SQL に変換します。STRING、BIGINT標準の変換では、入力された表示された分岐が直接処理され、完全なドキュメント コードに戻ることが回避されます。 -
按列设计:変換されたバッチ列を比較、フィルター、グループ化し、処理します。ドリスのベクトル化。
コーディング形式の標準サイズの場合、変換は実際のタイプに従ってグループ化され、バッチ変換の完了後に元の行順序が復元されます。
5.3 遅延: 在全電影电影時間间实新值
ここでは 3 つの概念を区別する必要があります。粉砕する これは写份件時按设计拆列机;細断されていない 物理的なレイアウトの説明;再構築または再構築 読み取りと実行時には、必要な部分文字列と残りのコードが具体的な論理値に復元されます。未公開文書を読むことは、「違反行為に反対する」ファイルの最初の実行と同等ではありません。
再構築の範囲はリクエストの内容と実際の実行パスによって異なります amount また、寿命中に、電気効果を設定できるようにするための電気効果;要求 device 子公司、子ツリーの完全な論理コンテンツを取得する必要があります; 完全なリクエスト payload複雑なツリー、配列、または高速パスの場合は、最初に完全な値を復元してから、必要な部分を抽出することもできます。分割列オブジェクトの場合、回復プロセスは、単に JSON テキストのいくつかの段落をつなぎ合わせるのではなく、フィールド タイプと分割されていない残りのフィールドの組み合わせのネストされた構造に基づいて、欠落しているフィールド、表示される null、および元のタイプの間の違いを保持します。
この種のリカバリには、計画と実行の組み合わせが必要です。次のセッションで完全なオブジェクトが必要な場合は、必要な情報をスキャンする必要があります。投影リーフの状態のみが読み取られ、フィールドを空のスペースで埋めることはできません。したがって、「オブジェクトの直接使用」と「生成された標準値」の境界は、実行処理まで明確に保持される必要があります。
クロスノード交換では特に注意が必要です。リーダーのメモリ状態は別の BE に転送できません。転送で分割列表示が維持されている場合、シリアル化によって必要なコンテンツが独立した転送表示に変わります。この表示には、まだ使用する必要がある投影確認のみを含めることができ、元の完全なオブジェクトを復元する必要は必ずしもありません。
ユーザーにとって最も直接的なアプローチは、必要なパスを選択し、計算のターゲット タイプを指定するだけです。 payload ダウンロードは、下位の感知機を介して行われ、管理者が最適な読み取り、エンコード、および送信作業を実行することが望ましい。
六、高効率写回:晨了了与批准パスデータ
ドリスは、ハンドマシンの電子効果の中で、未修正のバリアントをアイスバーグに書き、サポートするバリアントの表を使用してサポート データ ドキュメントを使用することを目的としています。文書の読み取り、文書の書き込みが可能で、2 つの独立した機能を備えています。したがって、Iceberg の読み取りでは既存のファイルのレイアウトを使用できますが、現在 Doris リンクでは同じタイプのセクションが自動的に生成されません。

図 6|バリアント書き込みフロー:Iceberg から Arrow へのバリアント書き込み Parquet、Paimon から Arrow C データと JNI の相互変換スクリプト。
6.1 氷山: バリアント → アロー → 寄木細工 → 表电影
Iceberg のバリアントは Arrow バリアント拡張機能にマッピングされます。 structDoris の電気化層は、値交換をクロスデバイスビルダーに置き換え、再び Parquet Writer によってドキュメントを生成します。
これにより、最初に JSON テキストを出力し、次に反対側を分析して型を推測するという中間プロセスが回避されます。
6.2 パイモン:ヴァリアント→アロー批次→JNI→原生作家
Paimon ハンドは、Doris Block を Arrow RecordBatch にロードし、Arrow C Data インターフェイスを介して Java に送信しました。 struct 組織は、Java 側で Arrow データを配列し、実行用の代替実行マシンを設定します。
ここでは、バッチ転送を使用して言語対話全体でフィールドの数を減らし、バッチ構造全体の中間ステップを使用して Java オブジェクト マトリックスを作成できます。
パイモン原生作家は月式拆列スキーマを使用できますが、推断拆列スキーマも使用できます。 Doris はライターを通じてこれらの機能に接続でき、拆列の書き込みと混合ファイル レイアウトをカバーする倉庫の使用例を示します。
七、これらの最適化の使用方法と検証方法
7.1 正しい値から始める
次の例では、カタログとサポート バリアント ターゲット テーブルがすでに準備されており、テーブルが含まれていることを前提としています。 id BIGINT 与 payload VARIANT配置の分岐実装に応じた例ですが、今回はクラスタ実装をリンクしませんでした。
INSERT INTO iceberg_catalog.demo.events VALUES
(1, PARSE_TO_VARIANT('{"region":"west","amount":120}')),
(2, PARSE_TO_VARIANT('{"region":"east","amount":80,"channel":"app"}'));
INSERT INTO paimon_catalog.demo.events
SELECT id, payload
FROM iceberg_catalog.demo.events;
PARSE_TO_VARIANT これは、バリアント コンテンツの JSON テキスト分析として表現されます。CAST('text' AS VARIANT) 文字列を Variant に変換する式です。 JSON オブジェクトのような文字列であっても、2 つの文字が同じになることはありません。
ソースに既に 10 進数、日付時刻などが明確に入力されている場合は、それを可能な限り予約し、すべての値を再度文字列に変換する必要はありません。エンジンをチェックするときは、値の精度、時間言語、欠損値、欠損 NULL、ネストされた配列の境界などのチェックに重点を置きます。
7.2 用Profil生机最高好下方
バリアントが効率的に読み取られているかどうかを判断することは、観察の入り口としてシングル パス クエリでオブジェクト全体をクエリするために使用できますが、ページの最後までしか読み込むことができません。
| インジケータープロファイル | 要点を観察する |
|---|---|
VariantLeafProjectionRowGroupColumns |
行のグループ 中电影叶子最作安全下ダウンロード |
VariantResidualProjectionRowGroupColumns |
まだ部分投影の状況 |
VariantFullProjectionRowGroupColumns |
完全な投影状況 |
VariantDirectLeafRows |
電影電影葉子に含まれる行数 |
VariantReconstructedRows / VariantReconstructionTime |
Complete Variant Rebuilt の安全量与時間 |
VariantUnshreddedDirectSeekRows |
未拆列安全按电影电影电影电影状況 |
VariantUnshreddedPrefixReuseRows |
複数用途の前にパスを入れ子にした様子 |
7.3 パフォーマンスを評価するときは、データを一緒にチェックする必要があります
-
日付: フィールド番号、ネストの深さ、混合型、欠損値の比率。
-
書類: 列図は、設計、プロパティの比例性、可能なファイルおよび行のグループのサイズを示します。
-
クエリ: 単一パスまたは完全なオブジェクト、選択的フィルタリング、ターゲット タイプの変換、および集計と関連付けの方法。
-
実行:冷暖キャッシュ、同時性、実際のバイト読み取り、クロスノード送信、およびパイモンの読み取り路布倂分
Doris 内部テーブルの子列とインデックスは別のストレージ リンクに属しており、Iceberg、Paimon ファイルに直接クエリすると、内部テーブル インデックスは自動的に取得されません。
八、性能試験
前のテキストでは、コンピュータ システムでの読み取りの変形例を紹介しました。次のページでは、クエリ内の実際のテーブルの実際のパフォーマンスを示します。
Spark にデータを書き込むこの 6 グループのテストでは、同じクエリ時間によれば、合計クエリ時間は 15.10 倍、クエリ時間は 19.14 倍になります。
8.1 テスト環境
テストでは 10 の顧客シナリオ query01 ~ query10 を使用し、データは OSS に保存され、ファイルは Iceberg、Paimon Append、Paimon PK を含む Parquet ファイルにあります。条次设计游、64 GB メモリ、Doris 4.2 および Spark 4.0.1 用のクエリ エンジン。
8.2 全体的なパフォーマンス: 拆列与未拆列设计均有上明
| ステータスを確認する | 最作次/エンジン | ドリス合计(2回目) | スパーク合计(2回目) | 総合的な加速 |
|---|---|---|---|---|
| 冷跑 | 60 | 640,610 | 9,671,722 | 15.10× |
| ホットランニング | 60 | 481,396 | 9,215,467 | 19.14× |
電影按设计汇总、拆列分跑の冷跑、熱跑设计求比比说 55.24×、58.64×;未拆列データは別です 7.06×、9.08×これらの結果は、このラウンドの検索および展開構成では、両方のレイアウトが Doris の検索の利点を示しており、2 つの列間の差がより大きいことを示しています。

図7|Sparkはクエリ時間後にバリアントデータを書き込みます。
8.3 グループ化の結果:Paimon 拆列电影电影电影最高の電影
以下のテーブルはすべて、query01 ~ query10 の時間を合わせて秒単位でダウンロードします。
冷跑
| レイアウトを考えると | テーブルタイプ | ドリス | 点火時間(秒) | 加速度 |
|---|---|---|---|---|
| 拆列 | 氷山 | 65,608 | 1,903,720 | 29.02× |
| 拆列 | パイモンDUP | 20,692 | 2,030,473 | 98.13× |
| 拆列 | パイモンPK | 20,617 | 1,972,225 | 95.66× |
| 未拆列 | 氷山 | 186,875 | 1,299,066 | 6.95× |
| 未拆列 | パイモンDUP | 172,981 | 1,255,808 | 7.26× |
| 未拆列 | パイモンPK | 173,837 | 1,210,430 | 6.96× |
ホットランニング
| レイアウトを考えると | テーブルタイプ | ドリス | 点火時間(秒) | 加速度 |
|---|---|---|---|---|
| 拆列 | 氷山 | 61,760 | 1,893,542 | 30.66× |
| 拆列 | パイモンDUP | 17,953 | 1,920,502 | 106.97× |
| 拆列 | パイモンPK | 18,048 | 1,918,227 | 106.28× |
| 未拆列 | 氷山 | 126,834 | 1,141,699 | 9.00× |
| 未拆列 | パイモンDUP | 131,740 | 1,103,885 | 8.38× |
| 未拆列 | パイモンPK | 125,061 | 1,237,612 | 9.90× |
拆列データ中、Iceberg の熱跑技比 30.66×,パイモン DUP とパイモン PK は別々に 106.97×、106.28×電気効果電気技術比較の未掲載 8.38×~9.90×ここで、百千公司は、10 条の設計全体の時間の対応する組み合わせから来ています。

図 8|16 個の Spark 書き込みクエリの組み合わせが高速化。根柱の Spark と Doris の 10 条正语熟考時間之比; 2 つのレイアウトは同じリニア タイミングを使用し、1x 仮想線は同じ時間を示します。
結論: 柔軟な構造を効率的な計算に組み込みましょう
変更されていないデータのバージョンは、型の値用に予約されています。バイナリコーディングによりテキスト変換が軽減され、列裁分と電視磁分の分割列レイアウトが条件を作成します。ドリスは再び投影パス、叶子列の再利用、スケール変換、バッチ計算と遅延を経て、これらの条件を実際の収入の実行に変換します。
对社区湖安电影、最も注目すべきはこのメインスレッドです。保存するときに型を保持し、パスを取得する必要があるときに読み取り、計算するときにできるだけ型を使用し、型が使用できるときに再度書き込みますIceberg と Paimon の適合の詳細は異なりますが、この線に沿って理解および検証できます。
現時点では、Variant と Iceberg、Paimon、Lance など多模湖仓能動力已合入 Doris 4.2 発行版最好,将过4.2 バージョンが正式にリリースされました。