प्रौद्योगिकी साझेदारी

अपाचे डोरिस अपाचे हुडी त्वरित सेटअप गाइड |.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

लेखकः:SelectDB इति तकनीकी दल

परिचयः - डाटा लेकहाउसः डाटा गोदामस्य उच्चप्रदर्शनं वास्तविकसमयप्रदर्शनं च डाटा लेकस्य न्यूनलाभस्य लचीलतायाः च सह संयोजयति यत् उपयोक्तृभ्यः विविधदत्तांशसंसाधनविश्लेषणस्य आवश्यकतां अधिकसुविधापूर्वकं पूर्तयितुं सहायकं भवति। विगतेषु बहुसंस्करणेषु अपाचे डोरिस् इत्यनेन डाटा-सरोवरेण सह स्वस्य एकीकरणं गहनं कृतम् अस्ति तथा च परिपक्व-एकीकृत-सरोवरस्य गोदामस्य च समाधानरूपेण विकसितम् अस्ति उपयोक्तृभ्यः शीघ्रं आरम्भं कर्तुं सुविधां दातुं वयं अपाचे डोरिस् इत्यस्य कृते सरोवरस्य गोदामस्य च एकीकृतवास्तुकलानिर्माणमार्गदर्शिकायाः ​​परिचयं करिष्यामः तथा च विभिन्नानां मुख्यधारा-डाटा-सरोवर-स्वरूपाणां भण्डारण-प्रणालीनां च लेखानाम् एकस्याः श्रृङ्खलायाः माध्यमेन परिचयं करिष्यामः, यत्र हुडी, आइसबर्ग्, पैमोन्, ओएसएस, डेल्टा-सरोवरः सन्ति , Kudu, BigQuery, इत्यादयः स्वागतम् अत्रैव तिष्ठन्तु।

एकं नवीनं मुक्तदत्तांशप्रबन्धनवास्तुकलारूपेण, डाटा लेकहाउसः आँकडागोदामानां उच्चप्रदर्शनं वास्तविकसमयप्रदर्शनं च आँकडासरोवरस्य न्यूनव्ययस्य लचीलतायाः च सह संयोजयति यत् उपयोक्तृभ्यः विविधदत्तांशस्य आवश्यकतां अधिकसुविधापूर्वकं पूर्तयितुं सहायकं भवति उद्यम-बृहत्-दत्तांश-प्रणालीषु ।

विगतेषु कतिपयेषु संस्करणेषु,अपाचे डोरिस् इदं दत्तांशसरोवरेण सह स्वस्य एकीकरणं निरन्तरं गभीरं करोति, अधुना परिपक्वं एकीकृतसरोवरं गोदामसमाधानं च विकसितम् अस्ति ।

  • 0.15 संस्करणात् आरभ्य अपाचे डोरिस् इत्यनेन Hive तथा Iceberg बाह्यसारणीः प्रवर्तन्ते, अपाचे Iceberg इत्यस्य उपरि data lake इत्यनेन सह संयोजनस्य क्षमताम् अन्वेष्टुं प्रयतते
  • संस्करण 1.2 तः अपाचे डोरिस् इत्यनेन आधिकारिकतया बहु-सूची-कार्यं प्रवर्तयितम्, यत् स्वचालितं मेटाडाटा-मानचित्रणं बहु-दत्तांश-स्रोतानां आँकडा-प्रवेशं च साक्षात्कृतवान्, तथा च बाह्य-आँकडा-पठने, प्रश्न-निष्पादने च इत्यादिषु अनेके कार्य-अनुकूलनानि कृतवान्, तथा च पूर्णतया समर्थः अस्ति of building अत्यन्तं द्रुतं सुलभं च लेकहाउस वास्तुकलानां क्षमताम्।
  • संस्करण 2.1 इत्यस्मिन् अपाचे डोरिस् सरोवरस्य गोदामस्य एकीकृतवास्तुकला व्यापकरूपेण सुदृढा कृता अस्ति, यत् न केवलं मुख्यधारा-दत्तांशसरोवरस्वरूपस्य (हुडी, आइसबर्ग्, पैमोन इत्यादीनां) पठन-लेखनक्षमतां वर्धयति, अपितु बहु-SQL-बोली-सङ्गतिं च परिचययति तथा च the ability to convert from original प्रणाली निर्विघ्नतया अपाचे डोरिस् प्रति स्विच करोति । आँकडाविज्ञानं बृहत्-परिमाणे आँकडा-पठन-परिदृश्येषु च डोरिस् एरो फ्लाइट् उच्च-गति-पठन-अन्तरफलकं एकीकृत्य, यत् आँकडा-संचरण-दक्षतायां १०० गुणान् सुधारं करोति

अपाचे डोरिस् सरोवरं गोदामं च एकस्मिन्।png

अपाचे डोरिस् + अपाचे हुडी

अपाचे हुडि सम्प्रति इदं मुख्यधारायां मुक्तदत्तांशसरोवरस्वरूपेषु अन्यतमम् अस्ति तथा च लेनदेनात्मकदत्तांशसरोवरप्रबन्धनमञ्चः अस्ति यत् अपाचे डोरिस् सहितं मुख्यधारायां प्रश्नइञ्जिनं समर्थयतिअपाचे डोरिस् अपाचे हुडी-दत्तांशसारणीनां पठनक्षमता अपि वर्धिता अस्ति :

  • Write Table इत्यत्र प्रतिलिपिं कुर्वन्तु: Snapshot Query
  • Read Table:Snapshot Queries, Read Optimized Queries इत्यत्र विलीनीकरणं कुर्वन्तु
  • समर्थन समय यात्रा
  • समर्थन वृद्धिशील पठन

अपाचे डोरिस् इत्यस्य उच्च-प्रदर्शन-प्रश्न-निष्पादनेन अपाचे हुडी-इत्यस्य वास्तविक-समय-दत्तांश-प्रबन्धन-क्षमतायाः च सह, कुशलं, लचीलं, न्यून-लाभं च आँकडा-प्रश्नं विश्लेषणं च प्राप्तुं शक्यते functions currently based on Apache Doris तथा Apache Hudi इत्येतयोः संयोजनं बहुभिः समुदायस्य उपयोक्तृभिः वास्तविकव्यापारपरिदृश्येषु सत्यापितं प्रचारितं च कृतम् अस्ति:

  • वास्तविकसमयदत्तांशविश्लेषणं संसाधनं च : वित्तीय-उद्योगे लेनदेन-विश्लेषणम्, विज्ञापन-उद्योगे वास्तविक-समय-क्लिक्-धारा-विश्लेषणम्, ई-वाणिज्य-उद्योगे च उपयोक्तृ-व्यवहार-विश्लेषणम् इत्यादीनां सामान्य-परिदृश्यानां सर्वेषां वास्तविक-समय-दत्तांश-अद्यतन-प्रश्न-विश्लेषणस्य आवश्यकता भवति हुडी वास्तविकसमये अद्यतनं दत्तांशं प्रबन्धनं च कर्तुं शक्नोति तथा च आँकडानां स्थिरतां विश्वसनीयतां च सुनिश्चितं कर्तुं शक्नोति डोरिस् वास्तविकसमये बृहत्-परिमाणस्य आँकडा-प्रश्न-अनुरोधं कुशलतया सम्पादयितुं शक्नोति .

  • आँकडानां पश्चात्तापः लेखापरीक्षा च : वित्तं चिकित्सापरिचर्या इत्यादीनां उद्योगानां कृते येषां कृते आँकडासुरक्षायाः सटीकतायाश्च अत्यन्तं उच्चा आवश्यकता भवति, आँकडानां पश्चात्तापः लेखापरीक्षा च अतीव महत्त्वपूर्णानि कार्याणि सन्ति। हुडी एकं समययात्राकार्यं प्रदाति यत् उपयोक्तृभ्यः ऐतिहासिकदत्तांशस्थितिं द्रष्टुं शक्नोति अपाचे डोरिस् इत्यस्य कुशलप्रश्नक्षमताभिः सह मिलित्वा, सटीकं पश्चात्तापं लेखापरीक्षां च प्राप्तुं कदापि आँकडानां अन्वेषणं विश्लेषणं च कर्तुं शक्नोति

  • वृद्धिशीलदत्तांशपठनं विश्लेषणं च: बृहत्-आँकडा-विश्लेषणं कुर्वन् प्रायः बृहत्-आँकडा-परिमाणस्य समस्यानां सामना भवति तथा च हुडी-वृद्धि-आँकडा-पठनस्य समर्थनं करोति, यत् उपयोक्तृभ्यः केवलं परिवर्तनशील-आँकडानां संसाधनं कर्तुं शक्नोति, यत्र एकस्मिन् समये आँकडानां पूर्ण-मात्रायां अद्यतनीकरणं न करणीयम् , Apache Doris' Incremental Read Functions इत्येतत् प्रक्रियां अधिकं कार्यक्षमम् अपि कर्तुं शक्नोति, येन आँकडासंसाधनस्य विश्लेषणस्य च दक्षतायां महत्त्वपूर्णं सुधारः भवति ।

  • दत्तांशस्रोतेषु संघीयप्रश्नाः : अनेकाः उद्यमदत्तांशस्रोताः जटिलाः सन्ति, तथा च दत्तांशः भिन्नदत्तांशकोषेषु संगृहीतः भवितुम् अर्हति । डोरिस् इत्यस्य बहु-सूचीकार्यं बहुविधदत्तांशस्रोतानां स्वचालितं मानचित्रणं समन्वयनं च समर्थयति, तथा च आँकडास्रोतानां मध्ये संघीयप्रश्नानां समर्थनं करोति । येषां उद्यमानाम् विश्लेषणार्थं बहुविधदत्तांशस्रोतात् आँकडानां प्राप्तिः एकीकरणं च आवश्यकं भवति, तेषां कृते एतेन दत्तांशप्रवाहमार्गः बहुधा लघुः भवति तथा च कार्यदक्षतायां सुधारः भवति

अयं लेखः पाठकान् परिचययिष्यति यत् कथं शीघ्रं Apache Doris + Apache Hudi कृते Docker वातावरणे परीक्षणं प्रदर्शनं च वातावरणं निर्मातव्यम्, तथा च पाठकानां शीघ्रं आरम्भं कर्तुं सहायतार्थं प्रत्येकस्य कार्यस्य संचालनं प्रदर्शयिष्यति

उपयोक्तुः मार्गदर्शनम्

अस्मिन् लेखे सम्बद्धाः सर्वाणि स्क्रिप्ट्-सङ्केताः च अस्मात् पतेः प्राप्तुं शक्यन्ते :https://github.com/apache/doris/tree/master/samples/datalake/hudi

०१ पर्यावरणसज्जता

अस्मिन् लेखे उदाहरणं Docker Compose इत्यस्य उपयोगेन परिनियोजितम् अस्ति घटकाः संस्करणसङ्ख्याः च निम्नलिखितरूपेण सन्ति ।

पर्यावरण तैयारी.png

०२ पर्यावरणनियोजनम्

  1. Docker संजालं रचयन्तु
sudo docker network create -d bridge hudi-net
  • 1
  1. सर्वान् घटकान् आरभत
sudo ./start-hudi-compose.sh
  • 1
  1. प्रारम्भानन्तरं, भवान् Spark आदेशपङ्क्तौ अथवा Doris आदेशपङ्क्तौ प्रवेशार्थं निम्नलिखितस्क्रिप्ट् उपयोक्तुं शक्नोति ।
sudo ./login-spark.sh
sudo ./login-doris.sh
  • 1
  • 2

०३ दत्तांशसज्जीकरणम्

तदनन्तरं Spark इत्यस्य माध्यमेन Hudi data जनयन्तु ।यथा अधोलिखिते कोड् मध्ये दर्शितं, क्लस्टर् मध्ये पूर्वमेव नामकं कार्ड् अस्तिcustomer Hive table, भवान् अस्य Hive table इत्यस्य माध्यमेन Hudi table निर्मातुम् अर्हति:

-- ./login-spark.sh
spark-sql> use default;

-- create a COW table
spark-sql> CREATE TABLE customer_cow
USING hudi
TBLPROPERTIES (
  type = 'cow',
  primaryKey = 'c_custkey',
  preCombineField = 'c_name'
)
PARTITIONED BY (c_nationkey)
AS SELECT * FROM customer;

-- create a MOR table
spark-sql> CREATE TABLE customer_mor
USING hudi
TBLPROPERTIES (
  type = 'mor',
  primaryKey = 'c_custkey',
  preCombineField = 'c_name'
)
PARTITIONED BY (c_nationkey)
AS SELECT * FROM customer;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

०४ दत्तांशप्रश्ना

यथा अधः दर्शितं, नामकं सञ्चिका hudi सूचीपत्रम् (माध्यमेन उपलब्धम्HOW CATALOGS अनुशीलय)। सूचीपत्रस्य निर्माणकथनं निम्नलिखितम् अस्ति ।

-- 已经创建,无需再次执行
CREATE CATALOG `hive` PROPERTIES (
    "type"="hms",
    'hive.metastore.uris' = 'thrift://hive-metastore:9083',
    "s3.access_key" = "minio",
    "s3.secret_key" = "minio123",
    "s3.endpoint" = "http://minio:9000",
    "s3.region" = "us-east-1",
    "use_path_style" = "true"
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. Catalog इत्येतत् मैन्युअल् रूपेण ताजगीं कुर्वन्तु तथा च निर्मितं Hudi सारणीं समन्वययन्तु:
-- ./login-doris.sh
doris> REFRESH CATALOG hive;
  • 1
  • 2
  1. हुडी इत्यस्मिन् आँकडानां संचालनार्थं स्पार्कस्य उपयोगः पुनः कैटलॉगं ताजगीकृत्य विना वास्तविकसमये डोरिस् इत्यत्र द्रष्टुं शक्यते । वयं क्रमशः COW तथा MOR सारणीषु Spark इत्यस्य माध्यमेन आँकडानां पङ्क्तिं सम्मिलितं कुर्मः:
spark-sql> insert into customer_cow values (100, "Customer#000000100", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 25);
spark-sql> insert into customer_mor values (100, "Customer#000000100", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 25);
  • 1
  • 2
  1. नवीनतमं सम्मिलितं दत्तांशं प्रत्यक्षतया डोरिस् इत्यस्य माध्यमेन पृच्छितुं शक्यते:
doris> use hive.default;
doris> select * from customer_cow where c_custkey = 100;
doris> select * from customer_mor where c_custkey = 100;
  • 1
  • 2
  • 3
  1. ततः Spark इत्यस्य माध्यमेन सम्मिलितं कुर्वन्तु c_custkey=32 पूर्वमेव विद्यमानदत्तांशः अर्थात् विद्यमानदत्तांशस्य अधिलेखनम् :
spark-sql> insert into customer_cow values (32, "Customer#000000032_update", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 15);
spark-sql> insert into customer_mor values (32, "Customer#000000032_update", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 15);
  • 1
  • 2
  1. अद्यतनदत्तांशं डोरिस् इत्यस्य माध्यमेन पृच्छितुं शक्यते:
doris> select * from customer_cow where c_custkey = 32;
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
doris> select * from customer_mor where c_custkey = 32;
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

०५ वृद्धिशीलपठनम्

Incremental Read Hudi द्वारा प्रदत्तेषु कार्यात्मकविशेषतासु अन्यतमम् अस्ति Incremental Read इत्यस्य माध्यमेन उपयोक्तारः निर्दिष्टसमयपरिधिमध्ये वृद्धिशीलदत्तांशं प्राप्तुं शक्नुवन्ति, तस्मात् आँकडानां वृद्धिशीलप्रक्रियाकरणं प्राप्तुं शक्नुवन्तिएतदर्थं डोरिस् सम्मिलितुं शक्नोतिc_custkey=100 तदनन्तरं परिवर्तनदत्तांशं पृच्छन्तु।यथा अधः दर्शितं तथा वयं कc_custkey=32दत्तांशः : १.

doris> select * from customer_cow@incr('beginTime'='20240603015018572');
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
spark-sql> select * from hudi_table_changes('customer_cow', 'latest_state', '20240603015018572');

doris> select * from customer_mor@incr('beginTime'='20240603015058442');
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
spark-sql> select * from hudi_table_changes('customer_mor', 'latest_state', '20240603015058442');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

०६ कालयात्रा

डोरिस् निर्दिष्टस्य स्नैपशॉट् संस्करणस्य हुडी-दत्तांशस्य प्रश्नं समर्थयति, तस्मात् दत्तांशस्य Time Travel कार्यस्य साक्षात्कारं करोति । प्रथमं, भवान् स्पार्क-माध्यमेन द्वयोः हुडी-सारणीयोः प्रस्तुतीकरण-इतिहासस्य प्रश्नं कर्तुं शक्नोति:

spark-sql> call show_commits(table => 'customer_cow', limit => 10);
20240603033556094        20240603033558249        commit        448833        0        1        1        183        0        0
20240603015444737        20240603015446588        commit        450238        0        1        1        202        1        0
20240603015018572        20240603015020503        commit        436692        1        0        1        1        0        0
20240603013858098        20240603013907467        commit        44902033        100        0        25        18751        0        0

spark-sql> call show_commits(table => 'customer_mor', limit => 10);
20240603033745977        20240603033748021        deltacommit        1240        0        1        1        0        0        0
20240603015451860        20240603015453539        deltacommit        1434        0        1        1        1        1        0
20240603015058442        20240603015100120        deltacommit        436691        1        0        1        1        0        0
20240603013918515        20240603013922961        deltacommit        44904040        100        0        25        18751        0        0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

ततः, डोरिस् इत्यस्य माध्यमेन तस्य निष्पादनं कर्तुं शक्यते c_custkey=32 , दत्तांशस्य निवेशनात् पूर्वं दत्तांशस्नैपशॉट् पृच्छन्तु ।यथा भवन्तः अधः द्रष्टुं शक्नुवन्तिc_custkey=32 अद्यापि दत्तांशः अद्यतनः न कृतः:

नोटः- Time Travel वाक्यविन्यासः सम्प्रति नूतनं अनुकूलकं समर्थयति नास्ति तथा च प्रथमं निष्पादयितुं आवश्यकम्set enable_nereids_planner=false;नूतनं अनुकूलकं निष्क्रियं कुर्वन्तु, अनन्तरसंस्करणेषु एषा समस्या निराकृता भविष्यति ।

doris> select * from customer_cow for time as of '20240603015018572' where c_custkey = 32 or c_custkey = 100;
+-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
| c_custkey | c_name             | c_address                             | c_phone         | c_acctbal | c_mktsegment | c_comment                                        | c_nationkey |
+-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
|        32 | Customer#000000032 | jD2xZzi UmId,DCtNBLXKj9q0Tlp2iQ6ZcO3J | 25-430-914-2194 |   3471.53 | BUILDING     | cial ideas. final, furious requests across the e |          15 |
|       100 | Customer#000000100 | jD2xZzi                               | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests              |          25 |
+-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
-- compare with spark-sql
spark-sql> select * from customer_mor timestamp as of '20240603015018572' where c_custkey = 32 or c_custkey = 100;

doris> select * from customer_mor for time as of '20240603015058442' where c_custkey = 32 or c_custkey = 100;
+-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
| c_custkey | c_name             | c_address                             | c_phone         | c_acctbal | c_mktsegment | c_comment                                        | c_nationkey |
+-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
|       100 | Customer#000000100 | jD2xZzi                               | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests              |          25 |
|        32 | Customer#000000032 | jD2xZzi UmId,DCtNBLXKj9q0Tlp2iQ6ZcO3J | 25-430-914-2194 |   3471.53 | BUILDING     | cial ideas. final, furious requests across the e |          15 |
+-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
spark-sql> select * from customer_mor timestamp as of '20240603015058442' where c_custkey = 32 or c_custkey = 100;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

प्रश्न अनुकूलनम्

अपाचे हुडी इत्यस्मिन् दत्तांशं मोटेन द्वयोः वर्गयोः विभक्तुं शक्यते - आधाररेखादत्तांशः, वृद्धिशीलदत्तांशः च । आधाररेखादत्तांशः प्रायः विलीनः Parquet सञ्चिका भवति, यदा तु वृद्धिशीलदत्तांशः INSERT, UPDATE अथवा DELETE इत्यनेन उत्पन्नं दत्तांशवृद्धिं निर्दिशति । आधाररेखादत्तांशः प्रत्यक्षतया पठितुं शक्यते, तथा च वृद्धिशीलदत्तांशः Merge on Read इत्यस्य माध्यमेन पठितव्यः ।

Hudi COW तालिकाप्रश्नानां अथवा MOR सारणी Read Optimized प्रश्नानां कृते, आँकडा आधाररेखादत्तांशः अस्ति, तथा च आँकडासञ्चिकाः प्रत्यक्षतया Doris इत्यस्य मूलनिवासी Parquet Reader इत्यस्य माध्यमेन पठितुं शक्यन्ते, अत्यन्तं द्रुताः प्रश्नप्रतिक्रियाः प्राप्तुं शक्यन्ते च वृद्धिशीलदत्तांशस्य कृते, डोरिस् इत्यनेन JNI इत्यस्य माध्यमेन Hudi इत्यस्य Java SDK इत्यस्य आह्वानं करणीयम् यत् तत् अभिगन्तुं शक्नोति ।इष्टतमं प्रश्नप्रदर्शनं प्राप्तुं अपाचे डोरिस् प्रश्ने दत्तांशं आधाररेखा तथा वृद्धिशीलदत्तांशयोः द्वयोः भागयोः विभज्य क्रमशः उपर्युक्तपद्धतीनां उपयोगेन पठिष्यति

एतस्य अनुकूलनविचारस्य सत्यापनार्थं वयं उत्तीर्णाः अभवम EXPLAIN अधोलिखिते प्रश्ने कियत् आधाररेखादत्तांशः, वृद्धिशीलदत्तांशः च अस्ति इति द्रष्टुं कथनम् । COW सारणीयाः कृते सर्वे १०१ दत्तांशखण्डाः आधाररेखादत्तांशः (hudiNativeReadSplits=101/101 ), अतः सर्वाणि COW सारणीः प्रत्यक्षतया Doris Parquet Reader इत्यस्य माध्यमेन पठितुं शक्यन्ते, अतः उत्तमं प्रश्नप्रदर्शनं प्राप्तुं शक्यते । ROW सारणीनां कृते अधिकांशः दत्तांशखण्डाः आधाररेखादत्तांशः (hudiNativeReadSplits=100/101), शार्ड्स् इत्यस्य संख्या वृद्धिशीलदत्तांशः अस्ति, तथा च मूलतः उत्तमं प्रश्नप्रदर्शनं प्राप्तुं शक्नोति ।

-- COW table is read natively
doris> explain select * from customer_cow where c_custkey = 32;
|   0:VHUDI_SCAN_NODE(68)                                        |
|      table: customer_cow                                       |
|      predicates: (c_custkey[#5] = 32)                          |
|      inputSplitNum=101, totalFileSize=45338886, scanRanges=101 |
|      partition=26/26                                           |
|      cardinality=1, numNodes=1                                 |
|      pushdown agg=NONE                                         |
|      hudiNativeReadSplits=101/101                              |

-- MOR table: because only the base file contains `c_custkey = 32` that is updated, 100 splits are read natively, while the split with log file is read by JNI.
doris> explain select * from customer_mor where c_custkey = 32;
|   0:VHUDI_SCAN_NODE(68)                                        |
|      table: customer_mor                                       |
|      predicates: (c_custkey[#5] = 32)                          |
|      inputSplitNum=101, totalFileSize=45340731, scanRanges=101 |
|      partition=26/26                                           |
|      cardinality=1, numNodes=1                                 |
|      pushdown agg=NONE                                         |
|      hudiNativeReadSplits=100/101                              |
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

Hudi आधाररेखादत्तांशयोः परिवर्तनं वर्धमानदत्तांशं च अधिकं अवलोकयितुं भवान् Spark मार्गेण केचन विलोपनक्रियाः कर्तुं शक्नोति:

-- Use delete statement to see more differences
spark-sql> delete from customer_cow where c_custkey = 64;
doris> explain select * from customer_cow where c_custkey = 64;

spark-sql> delete from customer_mor where c_custkey = 64;
doris> explain select * from customer_mor where c_custkey = 64;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

तदतिरिक्तं, विभाजन-शर्तैः विभाजन-छंटाईं कर्तुं शक्यते यत् दत्तांशस्य परिमाणं अधिकं न्यूनीकरोति, प्रश्न-वेगं च सुधारयति ।निम्नलिखित उदाहरणे, विभाजनस्थितेः माध्यमेनc_nationkey = 15 विभाजननिवृत्तिं कुर्वन्तु येन प्रश्नानुरोधानाम् एकमेव विभाजनं अभिगन्तुं आवश्यकं भवति (partition=1/26) दत्तांश।

-- customer_xxx is partitioned by c_nationkey, we can use the partition column to prune data
doris> explain select * from customer_mor where c_custkey = 64 and c_nationkey = 15;
|   0:VHUDI_SCAN_NODE(68)                                        |
|      table: customer_mor                                       |
|      predicates: (c_custkey[#5] = 64), (c_nationkey[#12] = 15) |
|      inputSplitNum=4, totalFileSize=1798186, scanRanges=4      |
|      partition=1/26                                            |
|      cardinality=1, numNodes=1                                 |
|      pushdown agg=NONE                                         |
|      hudiNativeReadSplits=3/4                                  |
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

निगमन

उपर्युक्तं अपाचे डोरिस् तथा अपाचे हुडी इत्येतयोः आधारेण परीक्षण/प्रदर्शनवातावरणस्य शीघ्रं निर्माणार्थं विस्तृतः मार्गदर्शकः अस्ति भविष्ये वयं अपाचे डोरिस् तथा विभिन्नैः मुख्यधारा-आँकडा-सरोवरैः सह एकीकृत-सरोवरस्य गोदाम-वास्तुकलानां च निर्माणार्थं मार्गदर्शकानां श्रृङ्खलां अपि प्रारभामः प्रारूपाः भण्डारणप्रणाल्याः च, यथा आइसबर्ग्, पैमोन्, ओएसएस, डेल्टा लेक् इत्यादयः, निरन्तरं ध्यानं दातुं स्वागतम्।