背景
現在、hudi と Spark のコレクションは依然として Spark データソース V1 に基づいています。hudi のソース実装をチェックして次のことを確認できます。
class DefaultSource extends RelationProvider
with SchemaRelationProvider
with CreatableRelationProvider
with DataSourceRegister
with StreamSinkProvider
with StreamSourceProvider
with SparkAdapterSupport
with Serializable {
ゴシップ
次に、Apache Hudi の予備調査 (2) (spark との組み合わせ)の残りを行います。
val syncHiveSuccess = metaSync(sqlContext.sparkSession, writeConfig, basePath, df.schema)
これは主にデータをハイブ メタデータに同期するためです。hoodie.datasource.hive_sync.enableが有効な場合 (デフォルトは false、有効ではありません)、hoodie.datasource.meta.sync.enableはtrue に
設定されます(デフォルトは false、有効ではありません) ) Open)、同時に、HiveSyncToolクラスがsyncClientToolClassSetコレクションに追加されます。これは後続の呼び出しに便利です。もちろん、パーカー.meta.sync.client.tool.class が設定されている場合は、それも追加されますコレクションに。パーカー.datasource.meta.sync.enableが trueの場合、パーカー.データソース.hive_sync.schema_string_length_thresh は、 spark.sql.sources.schemaStringLengthThresholdがデフォルトで 4000に設定されます。パーカー.meta_sync.spark.versioを現在の Spark バージョンに設定します。セットパーカー.メタ .sync.metadata_file_listingは
パーカー.metadata.enable (デフォルトは true) を指定し、 HiveSyncToolのsyncHoodieTable
メソッドを呼び出してメタデータを同期します。MORテーブルには2 つのテーブルがあり、1 つはrtテーブル、もう 1 つはroテーブルで、それぞれスナップショットに対応します。リアルタイム テーブル) と読み取り最適化テーブルただし、hoodie.datasource.hive_sync.skip_ro_suffixがtrue (デフォルトはfalse ) の場合、読み取り最適化テーブルはroサフィックスを追加せず、最終的に Spark で作成されたばかりのテーブルを更新します。したがって、挿入されたhudiテーブルはsparkクエリでクエリできます。