Apache Doris 高性能 Open Lake Variant 读写报报解析(含名电合後) – SelectDB

0
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 BIGINTpayload 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 対応する番号 120device そのうちのネストされたオブジェクトに対応します os 対応する文字列 "linux"2行目はありません device、フィールドの数を増やしました tags,今掴 amount 文字列として保存します。これらの違いは、値が異なる同じ列内で発生します。

Apache Doris 高性能 Open Lake Variant 读写报报解析(含名电合後) – SelectDB

図 1 | テーブル内の安全なペイロード列から、統合バリアント アセンブリのイメージが表示されます。

後の文 payload['region'] これは阿列画像中からのテイクアウトです region 分野、payload['device']['os'] 则油 device → os たとえば、次のようになります。 CAST(payload['device']['os'] AS STRING)、結果は文字列です linux列名、品行论および対象タイプ分電視” 从哪一列を取る、どれを取る、按什么硱カテゴリの答え」。

新しい属性を一度実装するたびにテーブル構造を変更する必要はありません。 120 和文字列 "120" 依然として異なる値が存在しており、検索時に期待される種類と異常値の処理方法を明確にする必要があります。

実際には、ビジネスのメインキー、イベント時刻、パーティションフィールドなどの安定した属性を通常の列に配置し、継続的に変化する拡張属性をバリアントに配置できます。したがって、安定したフィールドはパーティション化と関連付けに便利であり、拡張フィールドはスペース用に予約されています。

二、ストレージとエンコーディングのバリエーション

2.1 メタデータと値:ハンドル报报と安全在在了少里

バリアント未拆列的、通常は metadatavalue 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

物理レイアウト.png バリアント

図 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 は、式から認識可能な定数パスを収集し、フィルタリング リクエストと投影リクエストを分離します。

02-欲望の実行.png

図 3|Doris の全体的な実行フロー。FE はスキャンと実行タスクを計画し、BE シンクから次の実行計算を行い、結果をクエリして、ターゲット テーブルに書き込み、入力し、リンクをコミットします。

3.2 BE の実行: スキャン、式、分散計算

BE 以湖上でデータをスキャンし、ブロック バッチに複数のデータ列を含むように編成します。抽出、型変換、フィルタリング、集計、関連付けなどのパスは、計画の実装の計算で完了します。データ交換をノード間で実行する必要がある場合、Shimb によってさまざまな実行ステージに接続されます。フィルタリングが可能であり、集計も Shimb の両側に分散される可能性があり、概念的なフローを各クエリの固定シーケンスとして理解することはできません。

バリアントの場合、重要なのは、すべての計算でネストされたオブジェクトを完全に理解させることではなく、必要なパスを計算可能な列にし、同時に終了後に可能な限りオブジェクト全体を再構築することです。 SUM(amount)など、計算に含まれない多数の拡張フィールドをオブジェクトやテキストに繰り返し変換する必要はありません。

四、可読性が高い: ほとんど読む必要がなく、中間のオブジェクト構造がほとんどありません。

4.1 按文ファイルと行グループが投影範囲を決定する

以按地电影设计下載以下下載、设计下載 regionamount 寄木細工のスキャナー

  1. それは十分に証明できる: 必要なタイプのセクションを読み取ります。

  2. 叶子列これ以上これらの设计:必要な残価を確保し、回収に参加します。

  3. ローカル投影が完了したことを証明できません:完全な投影バリアントに戻ります。

これにより、クリッピングによってフィールドが失われないようにしながら、最適化をさまざまなファイル レイアウトに適応させることができます。

バリアント 3 つの読み方.png

図 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.osdevice.version 繰り返しの位置決めを減らすことができます device さんの作品です。配置されたパラメータについては、リーダーを後続の計算に適した列に編成できます。再度アクセスする必要があるツリーについては、予約することができ、完全なコンテンツが構築されます。

これらの最適化は主に CPU および中間オブジェクトへのアクセス領域を削減し、「Parquet 子列の独立読み取りによる I/O の削減」は別のメカニズムに属します。

五、高効率計算:結果をできるだけ早く抽出し、計算の種類を入力します

5.1 バリアント下降列、可用電子影最好最好的期間

ファイル内の物理レイアウトとメモリ内の計算は同じものではありません。

形状 予約されたコンテンツ 適切な取り扱い
エンコードされた メタデータ電子効果に非常に便利 バイナリ値を保持し、パスの位置決めとシリアル化を実行します
タイピング 可空の强开别校量列 少量のコンテンツは生成可能です
みじん切りにする リーダー電影電影電影树、電影与子列 叶子列を直接利用して、按必要発行设计值

これらのフォームは実行層の表示方法であり、ユーザーに表示される論理タイプは依然としてバリアントです。フィルタリング、切り取り、選択は引き続きフォームを維持できます。読者がドキュメント全体を再構築する必要がない場合、読者は適切な型を直接提供できます。

04-variant-compute.png

図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 つのステップに分けることができます。

  1. 道を進みます: バリエーションより抜粋 regionamountすでにリーフのタイプを持っている場合は、それを再利用してみてください。そうでない場合は、バイナリ構造がそれに応じて配置されます。

  2. タイプCAST 結果を必要な SQL に変換します。 STRINGBIGINT 標準の変換では、入力された表示された分岐が直接処理され、完全なドキュメント コードに戻ることが回避されます。

  3. 按列设计:変換されたバッチ列を比較、フィルター、グループ化し、処理します。ドリスのベクトル化。

コーディング形式の標準サイズの場合、変換は実際のタイプに従ってグループ化され、バッチ変換の完了後に元の行順序が復元されます。

5.3 遅延: 在全電影电影時間间实新值

ここでは 3 つの概念を区別する必要があります。粉砕する これは写份件時按设计拆列机;細断されていない 物理的なレイアウトの説明;再構築または再構築 読み取りと実行時には、必要な部分文字列と残りのコードが具体的な論理値に復元されます。未公開文書を読むことは、「違反行為に反対する」ファイルの最初の実行と同等ではありません。

再構築の範囲はリクエストの内容と実際の実行パスによって異なります amount また、寿命中に、電気効果を設定できるようにするための電気効果;要求 device 子公司、子ツリーの完全な論理コンテンツを取得する必要があります; 完全なリクエスト payload複雑なツリー、配列、または高速パスの場合は、最初に完全な値を復元してから、必要な部分を抽出することもできます。分割列オブジェクトの場合、回復プロセスは、単に JSON テキストのいくつかの段落をつなぎ合わせるのではなく、フィールド タイプと分割されていない残りのフィールドの組み合わせのネストされた構造に基づいて、欠落しているフィールド、表示される null、および元のタイプの間の違いを保持します。

この種のリカバリには、計画と実行の組み合わせが必要です。次のセッションで完全なオブジェクトが必要な場合は、必要な情報をスキャンする必要があります。投影リーフの状態のみが読み取られ、フィールドを空のスペースで埋めることはできません。したがって、「オブジェクトの直接使用」と「生成された標準値」の境界は、実行処理まで明確に保持される必要があります。

クロスノード交換では特に注意が必要です。リーダーのメモリ状態は別の BE に転送できません。転送で分割列表示が維持されている場合、シリアル化によって必要なコンテンツが独立した転送表示に変わります。この表示には、まだ使用する必要がある投影確認のみを含めることができ、元の完全なオブジェクトを復元する必要は必ずしもありません。

ユーザーにとって最も直接的なアプローチは、必要なパスを選択し、計算のターゲット タイプを指定するだけです。 payload ダウンロードは、下位の感知機を介して行われ、管理者が最適な読み取り、エンコード、および送信作業を実行することが望ましい。

六、高効率写回:晨了了与批准パスデータ

ドリスは、ハンドマシンの電子効果の中で、未修正のバリアントをアイスバーグに書き、サポートするバリアントの表を使用してサポート データ ドキュメントを使用することを目的としています。文書の読み取り、文書の書き込みが可能で、2 つの独立した機能を備えています。したがって、Iceberg の読み取りでは既存のファイルのレイアウトを使用できますが、現在 Doris リンクでは同じタイプのセクションが自動的に生成されません。

05-バリアント-書き込み.png

図 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 BIGINTpayload 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 つの列間の差がより大きいことを示しています。

クエリ合計.png

図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 条の設計全体の時間の対応する組み合わせから来ています。

クエリスピードアップ.png

図 8|16 個の Spark 書き込みクエリの組み合わせが高速化。根柱の Spark と Doris の 10 条正语熟考時間之比; 2 つのレイアウトは同じリニア タイミングを使用し、1x 仮想線は同じ時間を示します。

結論: 柔軟な構造を効率的な計算に組み込みましょう

変更されていないデータのバージョンは、型の値用に予約されています。バイナリコーディングによりテキスト変換が軽減され、列裁分と電視磁分の分割列レイアウトが条件を作成します。ドリスは再び投影パス、叶子列の再利用、スケール変換、バッチ計算と遅延を経て、これらの条件を実際の収入の実行に変換します。

对社区湖安电影、最も注目すべきはこのメインスレッドです。保存するときに型を保持し、パスを取得する必要があるときに読み取り、計算するときにできるだけ型を使用し、型が使用できるときに再度書き込みますIceberg と Paimon の適合の詳細は異なりますが、この線に沿って理解および検証できます。

現時点では、Variant と Iceberg、Paimon、Lance など多模湖仓能動力已合入 Doris 4.2 発行版最好,将过4.2 バージョンが正式にリリースされました。

Leave a Reply

Your email address will not be published. Required fields are marked *

李伟 张静 王秀英 刘敏 陈强 杨磊 赵洋 黄勇 周杰 吴浩 徐艳 孙莉 马超 朱博 胡婷 郭鹏 何琳 彭浩 高飞 林涛 罗晨 梁悦 宋波 郑欣 谢辉 韩冰 唐雷 冯芳 于峰 董瑞 萧雨 程亮 曹晶 袁威 邓健 许凡 傅雪 沈丹 曾宇 彭浩 春日花园生活指南
城市夜晚的美丽风景
探索自然世界的秘密
现代家庭生活小技巧
秋天森林里的故事
每天学习新的知识
传统美食文化分享
快乐周末旅行日记
简单健康生活方式
发现城市隐藏的角落
清晨阳光与咖啡时光
阅读带来的无限乐趣
山川湖泊摄影记录
创意家居设计灵感
夏日海边旅行故事
探索古老文化与历史
厨房里的美味时光
数字时代生活观察
世界各地风景记录
温暖家庭故事分享
未来科技发展趋势
安静午后的阅读时间 春天里的绿色花园
城市生活的新发现
美好生活从今天开始
森林深处的自然风光
简单实用的生活知识
寻找生活中的小幸福
夏日阳光下的故事
传统文化艺术之旅
探索世界自然奇观
快乐家庭生活日记
清晨时光与美好心情
发现身边有趣的事情
秋日旅行摄影记录
健康生活每日分享
安静午后的读书时光
现代城市建筑之美
寻找自然中的宁静
世界美食文化探索
冬日温暖生活指南
艺术与创意生活空间
山间小路旅行故事
未来科技改变生活
海边日落摄影分享
每天一个生活小知识
周末家庭休闲时光
探索历史文化故事
生活中的艺术灵感
花园里的四季变化
寻找城市里的安静角落
晨光花园里的宁静时刻
城市文化探索笔记
夏日微风与自然风景
美好生活灵感分享
森林漫步旅行故事
秋季花海摄影日记
温暖家庭生活点滴
探索世界艺术之美
每日健康饮食指南
静谧湖边的美丽风景
创意设计生活空间
清晨阅读与咖啡时光
发现自然奇妙世界
传统手工艺术分享
旅行中的快乐回忆
山谷里的宁静生活
美食与文化交流日记
花园四季变化记录
简单快乐生活方式
古镇历史文化漫游
海边日出摄影分享
现代科技生活观察
安静午后的书香时光
自然风景与旅行灵感
幸福生活每日小贴士
清晨森林里的阳光故事
传统文化与现代生活
寻找城市中的美好瞬间
春季花园生活记录
探索山川自然之美
快乐家庭周末时光
生活中的创意小发现
秋日森林摄影笔记
现代家居设计灵感
每日阅读带来的快乐
城市夜景摄影日记
简单健康的生活方式
古老建筑文化探索
夏天海边的温暖记忆
发现自然中的奇妙世界
午后咖啡与阅读时光
美食文化探索之旅
未来城市生活观察
山间清晨旅行日记
温馨家居生活分享
四季花草种植笔记
艺术世界里的奇妙发现
湖边安静的下午时光
探索历史留下的故事
快乐旅行生活指南
冬日阳光下的温暖生活
创意手工制作分享
绿色生活与自然探索
星空下的美丽夜晚
春日湖畔的宁静时光
城市花园生活新发现
森林深处的自然故事
清晨咖啡与阅读日记
传统艺术文化探索之旅
简单快乐的家庭生活
秋日山林摄影故事
探索生活中的创意灵感
现代城市建筑观察
夏日海岸美丽风景
每日健康生活小知识
寻找城市隐藏的故事
花园里的四季色彩
世界美食文化分享
温暖午后的阅读时间
探索山川湖泊之美
创意家居装饰灵感
冬日阳光生活记录
历史建筑背后的故事
绿色自然生活方式
夜晚星空摄影笔记
美好周末旅行回忆
发现艺术世界的魅力
乡村生活自然风光
每日生活创意分享
古老文化探索笔记
海边清晨散步日记
现代科技与未来生活
森林小屋的温暖故事
旅行路上的美丽风景
春日清晨的花园故事
森林深处的宁静生活
城市夜晚摄影记录
探索传统文化的魅力
夏季海边生活日记
简单健康生活新方式
秋天山谷里的美丽风景
温暖家庭生活分享
现代艺术与创意空间
湖边午后的阅读时光
发现生活中的小惊喜
四季花园种植笔记
世界美食文化探索
快乐周末旅行故事
自然世界里的奇妙发现
冬日阳光与温暖时光
古老建筑历史故事
山间小路旅行随笔
未来科技生活观察
清晨咖啡生活随想
绿色自然与美好生活
城市街头艺术发现
星空下的安静夜晚
春日山谷里的美好时光
城市清晨生活随笔
探索森林深处的秘密
传统美食制作日记
温暖阳光下的花园
现代生活创意分享
秋日湖畔摄影记录
寻找城市里的文化故事
快乐家庭周末生活
自然风景旅行随笔
午后阅读与安静时光
探索艺术世界的色彩
冬季森林生活故事
每天发现新的生活灵感
古老街道历史漫步
健康饮食与快乐生活
海边日落摄影故事
创意家居生活空间
星空下的宁静夜晚
四季自然变化记录
未来科技生活探索
山间小屋的温馨故事
晨曦中的绿色山谷
城市街角的温暖故事
春天花园里的新发现
传统手工艺术的魅力
夏日森林散步日记
现代家庭生活灵感
山间清晨的宁静时光
发现世界文化之美
快乐生活每日小记录
秋日湖边摄影故事
自然风光探索笔记
午后咖啡与书香时光
城市建筑创意观察
四季花草生活笔记
美食文化与生活故事
冬日暖阳下的回忆
寻找古老街道的故事
绿色生活创意指南
海边黄昏摄影随笔
艺术世界里的色彩故事
简单健康的每日生活
星空下的森林小屋
探索历史文化的足迹
雨后花园的清新时刻
春日河畔的悠闲时光
古城街巷里的文化故事
清晨森林自然观察笔记
家庭花园四季生活记录
寻找生活中的艺术灵感
秋日山间旅行故事
现代家居创意设计分享
午后阳光与阅读时刻
探索世界美食文化
夏夜星空摄影日记
城市公园里的绿色生活
传统工艺背后的故事
海边黄昏的温暖记忆
简单快乐的日常生活
山谷里的自然风景记录
城市建筑与创意空间
冬日午后的咖啡时光
探索历史文化的记忆
雨后森林里的清新世界
创意生活每日小发现
湖边小屋的温馨故事
绿色植物与家庭生活
夜晚城市灯光摄影记录
健康饮食与生活方式
四季自然色彩观察
快乐周末家庭日记
古老艺术文化探索
清风中的田园生活故事
春天花园里的清新早晨
森林小路上的自然故事
城市夜色中的温暖灯光
传统文化艺术探索笔记
夏日湖边的悠闲时光
现代生活中的创意灵感
秋季森林摄影生活记录
快乐家庭的周末故事
探索古老建筑的魅力
午后咖啡与阅读随想
自然世界里的奇妙色彩
简单健康生活每日分享
山谷清晨旅行摄影日记
创意家居空间设计灵感
世界美食文化生活记录
冬日阳光下的美好时刻
城市街角艺术发现之旅
绿色植物与生活美学
海边黄昏的宁静记忆
四季自然风景观察笔记
古老街道里的历史故事
星空下的安静阅读时光
雨后山林的清新世界
春日山野里的清新空气
城市清晨的生活故事
森林深处的绿色世界
传统文化艺术生活笔记
夏日湖边摄影时光
现代家庭创意生活指南
秋天森林里的温暖故事
寻找自然世界的色彩
快乐周末阅读生活记录
古老街道文化探索日记
午后花园里的宁静时刻
山川湖泊自然摄影分享
健康饮食与简单生活
海边黄昏旅行随笔
未来科技生活新发现
冬日咖啡与书香时光
创意家居设计生活灵感
四季花草自然观察笔记
城市建筑背后的故事
雨后森林里的漫步时光
世界美食与文化探索
星空下的乡村生活故事
艺术世界里的创意发现
清晨河边的安静时光
绿色生活每日小知识
古镇历史文化漫步记录
温暖阳光里的幸福生活
春日花园里的悠闲时光
城市夜色与灯光故事
森林清晨自然观察笔记
传统手工文化探索之旅
夏日湖畔的温暖记忆
创意家庭生活新灵感
秋季山林摄影随笔
寻找古老街巷的故事
午后阅读与咖啡生活
自然世界中的美丽色彩
健康生活每日新发现
海边黄昏摄影故事
现代城市建筑艺术观察
冬日森林里的宁静时光
世界美食与文化生活
山间小屋的温馨故事
四季花草种植生活记录
艺术世界里的奇妙发现
清晨河畔的绿色风景
简单快乐家庭生活日记
历史建筑文化漫步记录
星空下的安静阅读时刻
绿色生活与自然探索
雨后城市的清新早晨
创意家居设计生活分享
乡村田野里的美好时光
古典艺术与现代生活
湖边日落的温暖故事
春日森林里的清晨阳光
城市生活中的艺术发现
秋日花园的温暖故事
探索古老文化的魅力
湖边午后的阅读时光
现代家庭生活创意分享
夏日山谷自然摄影日记
简单快乐的每日生活
传统手工艺术探索笔记
城市夜晚的美丽灯光
绿色生活与自然故事
冬日咖啡与温暖时刻
世界美食文化生活记录
山间小路旅行随笔
星空下的宁静生活
创意家居空间设计灵感
四季花草自然观察记录
雨后森林里的清新空气
历史建筑背后的文化故事
清晨河畔的悠闲时光
艺术世界里的奇妙色彩
乡村田野的美好记忆
健康生活每日小知识
海边日落摄影生活日记
古镇街巷文化漫步
花园里的快乐生活故事
探索自然世界的新发现
午后阳光里的安静时光
现代城市生活观察笔记
春日湖边的悠闲生活
城市街角的艺术故事
清晨森林里的自然声音
传统文化生活探索笔记
夏日花园摄影故事
现代家庭创意空间
秋日山谷里的温暖阳光
寻找生活中的美好瞬间
午后咖啡与书香生活
世界美食文化探索日记
冬日森林的宁静故事
绿色植物与家居生活
山间小路旅行随想
古老建筑里的历史记忆
快乐周末生活记录
星空下的安静阅读时间
四季自然色彩摄影笔记
创意艺术与生活灵感
雨后花园里的清新时刻
简单健康的每日生活
城市夜晚灯光摄影记录
乡村田园里的幸福时光
探索艺术世界的新发现
海边清晨的温柔阳光
花草世界自然观察日记
古镇街巷里的生活故事
春日森林里的温暖阳光
城市街头艺术生活记录
清晨湖畔的宁静故事
传统文化与生活美学
秋季山谷自然摄影笔记
现代家庭创意生活分享
夏日花园里的美好时光
探索古老艺术文化故事
午后咖啡与阅读生活
绿色植物自然观察日记
冬日小屋里的温馨故事
世界美食文化探索笔记
星空下的安静阅读时光
四季花草生活新发现
雨后森林的清新世界
创意家居设计灵感分享
海边黄昏的浪漫风景
古镇街道里的历史记忆