|
| 1 | +--- |
| 2 | +title: ่็ฑป้ฎ |
| 3 | +--- |
| 4 | + |
| 5 | +ๅจ Databend ไธญ๏ผๆจๅฏไปฅ้ๆฉ้่ฟ่็ฑป่กจๆฅๅขๅผบๆฅ่ฏขๆง่ฝใ่ฟๆถๅๅฐๅ Databend ๆไพๆ็กฎ็ๆไปค๏ผๅ่ฏๅฎๅฆไฝ็ป็ปๅๅ็ปๅญๅจไธญ็่ก๏ผ่ไธๆฏไป
ไป
ไพ่ตๆฐๆฎๆๅ็้กบๅบใๆจๅฏไปฅ้่ฟๅฎไนไธไธช่็ฑป้ฎๆฅ่็ฑป่กจ๏ผ่ฏฅ้ฎ้ๅธธ็ฑไธไธชๆๅคไธชๅๆ่กจ่พพๅผ็ปๆใๅ ๆญค๏ผDatabend ๆ นๆฎ่ฟไธช่็ฑป้ฎๆๅๆฐๆฎ๏ผๅฐ็ธไผผ็่กๅ็ปๅฐ็ธ้ป็ๅไธญใ่ฟไบๅๅฏนๅบไบ Databend ็จไบๆฐๆฎๅญๅจ็ Parquet ๆไปถใๆดๅค่ฏฆ็ปไฟกๆฏ๏ผ่ฏทๅ้
[Databend ๆฐๆฎๅญๅจ๏ผๅฟซ็
งใๆฎตๅๅ](/sql/sql-commands/ddl/table/optimize-table#databend-ๆฐๆฎๅญๅจ-ๅฟซ็
ง-ๆฎต-ๅ-ๅ)ใ |
| 6 | + |
| 7 | +:::tip |
| 8 | +ๅจๅคงๅคๆฐๆ
ๅตไธ๏ผ่ฎพ็ฝฎ่็ฑป้ฎไธๆฏๅฟ
้็ใ่็ฑปๆ้ๆฐ่็ฑป่กจ้่ฆๆถ้ดๅนถๆถ่ๆจ็ไฟก็จ๏ผ็นๅซๆฏๅจ Databend Cloud ็ฏๅขไธญใDatabend ๅปบ่ฎฎไธป่ฆไธบๆฅ่ฏขๆง่ฝ่พๆ
ข็ๅคงๅ่กจๅฎไน่็ฑป้ฎใ |
| 9 | +::: |
| 10 | + |
| 11 | +่็ฑป้ฎไฝไธบ Databend ๅ
ๆๅกๅฑไธญ็ๅ
ๆฐๆฎไธๅญๅจๅ๏ผParquet ๆไปถ๏ผไน้ด็่ฟๆฅใไธๆฆไธบ่กจๅฎไนไบ่็ฑป้ฎ๏ผ่กจ็ๅ
ๆฐๆฎๅฐฑไผๅปบ็ซไธไธช้ฎๅผๅ่กจ๏ผๆ็คบๅๆ่กจ่พพๅผๅผไธๅ
ถๅ่ช็ๅญๅจๅไน้ด็่ฟๆฅใๅฝๆง่กๆฅ่ฏขๆถ๏ผDatabend ๅฏไปฅไฝฟ็จๅ
ๆฐๆฎๅฟซ้ๅฎไฝๆญฃ็กฎ็ๅ๏ผไธๆช่ฎพ็ฝฎ่็ฑป้ฎๆถ็ธๆฏ๏ผ่ฏปๅ็่กๆฐๆดๅฐใ |
| 12 | + |
| 13 | +## ่็ฑป้ฎ็ๅทฅไฝๅ็ |
| 14 | + |
| 15 | +่ฎฉๆไปฌ่่ไธไธชๅ
ๅซๅ ๆฟๅคงๆๆๅๅธๆธฉๅบฆ็่กจ๏ผๅ
ๅซไธไธชๅ๏ผCityใTemperature ๅ Provinceใ |
| 16 | + |
| 17 | +```sql |
| 18 | +CREATE TABLE T ( |
| 19 | + City VARCHAR(255), |
| 20 | + Temperature DECIMAL(10, 2), |
| 21 | + Province VARCHAR(255) |
| 22 | +); |
| 23 | +``` |
| 24 | + |
| 25 | +ๅฆๆๆจ็ๆฅ่ฏขไธป่ฆๆถๅๆ นๆฎๆธฉๅบฆๆฃ็ดขๅๅธ๏ผๅๅฐ่็ฑป้ฎ่ฎพ็ฝฎไธบ Temperature ๅใไปฅไธๆฏๅฆไฝไธบ็ปๅฎ่กจๅญๅจๆฐๆฎๅ็็คบไพ๏ผ |
| 26 | + |
| 27 | + |
| 28 | + |
| 29 | +่กๆ นๆฎๆฏไธชๅ๏ผๆไปถ๏ผไธญ็ Temperature ๅ่ฟ่กๆๅบใ็ถ่๏ผๅไน้ดๅฏ่ฝๅญๅจ้ๅ ็ๆธฉๅบฆ่ๅดใๅฆๆๆฅ่ฏขๆฐๅฅฝ่ฝๅจๅ็้ๅ ่ๅดๅ
๏ผๅ้่ฆ่ฏปๅๅคไธชๅใๅจ่ฟ็งๆ
ๅตไธๆถๅ็ๅๆฐ็งฐไธบโๆทฑๅบฆโใๅ ๆญค๏ผๆทฑๅบฆ่ถๅฐ่ถๅฅฝใ่ฟๆๅณ็ๅจๆฅ่ฏขๆ้ด่ฏปๅๆดๅฐ็็ธๅ
ณๅๅฏไปฅๆ้ซๆฅ่ฏขๆง่ฝใ |
| 30 | + |
| 31 | +่ฆๆฅ็่กจ็่็ฑปๆ
ๅต๏ผ่ฏทไฝฟ็จ[CLUSTERING_INFORMATION](/sql/sql-functions/system-functions/clustering_information)ๅฝๆฐใไพๅฆ๏ผ |
| 32 | + |
| 33 | +```sql |
| 34 | +SELECT * FROM clustering_information('default','T'); |
| 35 | +*************************** 1. row *************************** |
| 36 | + cluster_key: (id) |
| 37 | + total_block_count: 451 |
| 38 | + constant_block_count: 0 |
| 39 | +unclustered_block_count: 0 |
| 40 | + average_overlaps: 2.1774 |
| 41 | + average_depth: 2.4612 |
| 42 | + block_depth_histogram: {"00001":32,"00002":217,"00003":164,"00004":38} |
| 43 | +1 row in set (0.02 sec) |
| 44 | +Read 1 rows, 448.00 B in 0.015 sec., 67.92 rows/sec., 29.71 KiB/sec. |
| 45 | +``` |
| 46 | + |
| 47 | +| ๅๆฐ | ๆ่ฟฐ | |
| 48 | +| ----------------------- | ------------------------------------------------------------------------ | |
| 49 | +| cluster_key | ๅฎไน็่็ฑป้ฎใ | |
| 50 | +| total_block_count | ๅฝๅๅ็ๆปๆฐใ | |
| 51 | +| constant_block_count | ๆๅฐ/ๆๅคงๅผ็ธ็ญ็ๅๆฐ๏ผๆๅณ็ๆฏไธชๅๅชๅ
ๅซไธไธช๏ผ็ป๏ผ่็ฑป้ฎๅผใ | |
| 52 | +| unclustered_block_count | ๅฐๆช่็ฑป็ๅๆฐใ | |
| 53 | +| average_overlaps | ็ปๅฎ่ๅดๅ
้ๅ ๅ็ๅนณๅๆฏ็ใ | |
| 54 | +| average_depth | ่็ฑป้ฎ็้ๅ ๅๅบ็ๅนณๅๆทฑๅบฆใ | |
| 55 | +| block_depth_histogram | ๆฏไธชๆทฑๅบฆ็บงๅซ็ๅๅบๆฐใ่พไฝๆทฑๅบฆ็บงๅซไธๅๅบ็ๆด้ซ้ไธญๅบฆ่กจ็คบๆดๆๆ็่กจ่็ฑปใ | |
| 56 | + |
| 57 | +### ้ๆฉ่็ฑป้ฎ |
| 58 | + |
| 59 | +่็ฑป้ฎๅฏไปฅๆฏ่กจไธญ็ไธไธชๆๅคไธชๅ๏ผๆ่
ๆฏๅบไบ่ฟไบๅ็่กจ่พพๅผใ้ๅธธ๏ผๆจๅฎไน็่็ฑป้ฎๅบไธๆฐๆฎๆฅ่ฏขไธญๅบ็จ็ไธป่ฆ่ฟๆปคๅจ็ธไธ่ดใไพๅฆ๏ผๅฆๆๅคงๅคๆฐๆฅ่ฏขๆถๅๆ`order_id`่ฟๆปคๆฐๆฎ๏ผๅๅปบ่ฎฎๅฐ`order_id`ๅ่ฎพ็ฝฎไธบ่กจ็่็ฑป้ฎใ |
| 60 | + |
| 61 | +```sql |
| 62 | +CREATE TABLE sales ( |
| 63 | + order_id INT, |
| 64 | + order_date TIMESTAMP, |
| 65 | + product_id INT, |
| 66 | + is_secondhand BOOLEAN, |
| 67 | + quantity INT, |
| 68 | + region VARCHAR, |
| 69 | + product_category VARCHAR, |
| 70 | + -- ๅ
ถไปๅ... |
| 71 | + CLUSTER BY (order_id) |
| 72 | +); |
| 73 | +``` |
| 74 | + |
| 75 | +ๅฆไธๆน้ข๏ผๅฆๆ่ฟๆปค้ๅธธๅบไบ`region`ๅ`product_category`ๅ็๏ผๅไฝฟ็จ่ฟไธคไธชๅ่็ฑป่กจๅฐๆฏๆ็็๏ผ |
| 76 | + |
| 77 | +```sql |
| 78 | +CREATE TABLE sales ( |
| 79 | + order_id INT, |
| 80 | + order_date TIMESTAMP, |
| 81 | + product_id INT, |
| 82 | + is_secondhand BOOLEAN, |
| 83 | + quantity INT, |
| 84 | + region VARCHAR, |
| 85 | + product_category VARCHAR, |
| 86 | + -- ๅ
ถไปๅ... |
| 87 | + CLUSTER BY (region, product_category) |
| 88 | +); |
| 89 | +``` |
| 90 | + |
| 91 | +ๅจ้ๆฉๅไฝไธบ่็ฑป้ฎๆถ๏ผ็กฎไฟไธๅๅผ็ๆฐ้ๅจๆๆๆฅ่ฏขๆง่ฝๅ็ณป็ปๅ
ไผๅๅญๅจไน้ดๅๅพๅนณ่กกใ |
| 92 | + |
| 93 | +ไพๅฆ๏ผๅบไบไป
ๅ
ๅซๅธๅฐๅผ็`is_secondhand`ๅ่็ฑป่กจๅฏ่ฝไธไผๅจๆฐๆฎๅ็ปๆน้ขๆไพๅคชๅคๅฅฝๅคใ่ฟๆฏๅ ไธบไธๅๅผๆ้๏ผ่็ฑปๅฏ่ฝไธไผๅฏผ่ด็ธไผผๆฐๆฎ็ๆพ่็ฉ็ๅ็ป๏ผๅฝฑๅ่็ฑปๅฏนๆฅ่ฏขไผๅ็ๆฝๅจไผๅฟใ |
| 94 | + |
| 95 | +ๅ
ทๆๅคง้ไธๅๅผ็ๅ๏ผๅฆ`order_id`ๅ๏ผ้ๅธธไธๆฏ็ดๆฅ็จไฝ่็ฑป้ฎ็ๅฅฝๅ้๏ผๅ ไธบๅฎๅพๅไบ้ป็ขๅญๅจๆ็ๅนถๅๅผฑๆฐๆฎๅ็ป็ๆๆใ็ถ่๏ผไธไธชๅฏ่ก็ๆฟไปฃๆนๆกๆฏ่่ไฝฟ็จ่กจ่พพๅผๆฅโๅๅฐโไธๅๅผใไพๅฆ๏ผๅฆๆ`order_id`้ๅธธๅ
ๅซไธไธชๆฅๆ๏ผไพๅฆ๏ผ20240116๏ผ๏ผไปๅบๅฎไฝ็ฝฎๅผๅง๏ผไปๅ
ถไธญๆๅๆถ้ด็ปไปถๅฏไปฅไฝไธบๆดๅ้็่็ฑป้ฎใ |
| 96 | + |
| 97 | +```sql |
| 98 | +CREATE TABLE sales ( |
| 99 | + order_id INT, |
| 100 | + order_date TIMESTAMP, |
| 101 | + product_id INT, |
| 102 | + is_secondhand BOOLEAN, |
| 103 | + quantity INT, |
| 104 | + region VARCHAR, |
| 105 | + product_category VARCHAR, |
| 106 | + -- ๅ
ถไปๅ... |
| 107 | + CLUSTER BY (SUBSTRING(order_id,7,8)) |
| 108 | +); |
| 109 | +``` |
| 110 | + |
| 111 | +้่ฟไฝฟ็จไป`order_id`ๅๆๅ็ๆฅๆ่็ฑป่กจ๏ผๅจๅไธๅคฉๅ็็ไบคๆ็ฐๅจ่ขซๅ็ปๅฐ็ธๅ็ๆ็ธ้ป็ๅไธญใ่ฟ้ๅธธๅฏผ่ดๅ็ผฉๆน่ฟๅๆฅ่ฏขๆง่กๆ้ดๅฟ
้กปไปๅญๅจ่ฏปๅ็ๆฐๆฎ้ๅๅฐ๏ผๆๅฉไบๆ้ซๆดไฝๆง่ฝใ |
| 112 | + |
| 113 | +### ไฝฟ็จ่ชๅฎไนๅๅคงๅฐ่ฐๆดๆง่ฝ |
| 114 | + |
| 115 | +Databend ไธญ็ๅๅคงๅฐ็ฑ[Fuse Engine](/sql/sql-reference/table-engines/fuse)็ ROW_PER_BLOCK ๅ BLOCK_SIZE_THRESHOLD ๅๆฐ็กฎๅฎใๅฝไปปไธ้ๅผ่พพๅฐๆถ๏ผDatabend ไผๅๅปบไธไธชๆฐๅใๆจๅฏไปฅ้่ฟไธบๅ
ๅซ่็ฑป้ฎ็่กจ่ชๅฎไนๅๅคงๅฐๆฅ่ฟไธๆญฅๅขๅผบๅ็นๅ่ๅดๆฅ่ฏข็ๆง่ฝใ |
| 116 | + |
| 117 | +้่ฟ่ชๅฎไนๅๅคงๅฐๅขๅ ๅญๅจๅ็ๆฐ้๏ผๅฏผ่ดๆฅ่ฏขๅค็ๆ้ด่ฏปๅ็่กๆฐๅๅฐใ่ฟๆฏๅ ไธบๅฏนไบ็ธๅ็ๆฐๆฎ้๏ผๅ็ๆฐ้ๅขๅ ๏ผๆฏไธช Parquet ๆไปถไธญ็่กๆฐๅๅฐใ |
| 118 | + |
| 119 | +**็คบไพ**: |
| 120 | + |
| 121 | +ไปฅไธ่ฏญๅฅ้่ฆๆซๆ่ฟ 500,000 ่กๆฅๅค็ๅ็นๆฅ่ฏข๏ผ |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | +ไผๅๅๅฐไบๅๅคงๅฐ๏ผๅฏผ่ดๆฏไธช Parquet ๆไปถ็่กๆฐๅๅฐใ |
| 126 | + |
| 127 | +```sql |
| 128 | +ALTER TABLE sbtest10w SET OPTIONS(ROW_PER_BLOCK=100000,BLOCK_SIZE_THRESHOLD=52428800); |
| 129 | +``` |
| 130 | + |
| 131 | +ไผๅๅ๏ผ็ธๅ็ๆฅ่ฏขๅช้่ฆๆซๆ 100,000 ่ก๏ผ |
| 132 | + |
| 133 | + |
| 134 | + |
| 135 | +:::tip |
| 136 | +่ฝ็ถๅๅฐๅๅคงๅฐๅฏ่ฝไผๅๅฐๅไธชๆฅ่ฏขๆถๅ็่กๆฐ๏ผไฝ้่ฆ็ๆฏ่ฆๆณจๆ๏ผ่พๅฐ็ๅๅคงๅฐๅนถไธๆปๆฏๆดๅฅฝใๅจ่ฐๆดๅๅคงๅฐไนๅ๏ผ่ฟ่ก้ๅฝ็ๆง่ฝ่ฐๆดๅๆต่ฏไปฅ็กฎๅฎๆไฝณ้
็ฝฎ่ณๅ
ณ้่ฆใไธๅ็ๆฐๆฎๅๆฅ่ฏข็ฑปๅๅฏ่ฝ้่ฆไธๅ็ๅๅคงๅฐไปฅๅฎ็ฐๆไฝณๆง่ฝใ |
| 137 | +::: |
| 138 | + |
| 139 | +## ้ๆฐ่็ฑป่กจ |
| 140 | + |
| 141 | +ไธไธช่ฏๅฅฝ่็ฑป็่กจๅฏ่ฝๅจๆไบๅญๅจๅๅ
ๅๅพๆททไนฑ๏ผ่ฟๅฏ่ฝไผๅฏนๆฅ่ฏขๆง่ฝไบง็่ด้ขๅฝฑๅใไพๅฆ๏ผๅฆๆ่กจ็ปง็ปญ่ฟ่ก DML ๆไฝ๏ผINSERT / UPDATE / DELETE๏ผ๏ผๅๅฏ่ฝ้่ฆ่่้ๆฐ่็ฑป่กจใๆๅ
ณๅฆไฝ้ๆฐ่็ฑป่กจ็่ฏฆ็ปไฟกๆฏ๏ผ่ฏทๅ้
[RECLUSTER TABLE](/sql/sql-commands/ddl/clusterkey/dml-recluster-table)ใ |
| 142 | + |
| 143 | +:::note |
| 144 | +ๅฝไฝฟ็จ COPY INTO ๆ REPLACE INTO ๅฝไปคๅฐๆฐๆฎๅๅ
ฅๅ
ๅซ่็ฑป้ฎ็่กจๆถ๏ผDatabend ๅฐ่ชๅจๅฏๅจ้ๆฐ่็ฑป่ฟ็จ๏ผไปฅๅๆฎตๅๅๅ็ผฉ่ฟ็จใ |
| 145 | +::: |
| 146 | + |
| 147 | +ๅฆๆๆจ้ๆฐ่็ฑป[่็ฑป้ฎ็ๅทฅไฝๅ็](#่็ฑป้ฎ็ๅทฅไฝๅ็)้จๅไธญ็็คบไพ่กจ๏ผๆจๅฏ่ฝไผๅพๅฐๅฆไธๅญๅจ็ๆฐๆฎ๏ผ |
| 148 | + |
| 149 | + |
| 150 | + |
| 151 | +่ฟๆฏๆ็ๆณ็ๆ
ๅตใๅจๅคงๅคๆฐๆ
ๅตไธ๏ผๅฎ็ฐ่ฟ็งๆ
ๅตๅฏ่ฝ้่ฆๅคๆฌก่ฟ่ก้ๆฐ่็ฑปๆไฝใ้ๆฐ่็ฑป่กจ้่ฆๆถ้ด๏ผๅฆๆๅ
ๅซ**FINAL**้้กน๏ผๅๆถ้ดๆด้ฟ๏ผๅไฟก็จ๏ผๅฝๆจๅจ Databend Cloud ไธญๆถ๏ผใDatabend ๅปบ่ฎฎไฝฟ็จ[CLUSTERING_INFORMATION](/sql/sql-functions/system-functions/clustering_information)ๅฝๆฐๆฅ็กฎๅฎไฝๆถ้ๆฐ่็ฑป่กจ๏ผ |
| 152 | + |
| 153 | +```sql |
| 154 | +SELECT If(average_depth > total_block_count * 0.001 |
| 155 | + AND average_depth > 1, 'The table needs re-cluster now', |
| 156 | + 'The table does not need re-cluster now') |
| 157 | +FROM CLUSTERING_INFORMATION('<your_database>', '<your_table>'); |
| 158 | +``` |
| 159 | + |
| 160 | +## ็ฎก็่็ฑป้ฎ |
| 161 | + |
| 162 | +ๅจ Databend ไธญ๏ผๆจๅฏไปฅๅจๅๅปบ่กจๆถ่ฎพ็ฝฎ่็ฑป้ฎ๏ผๅนถไธๅฆๆ้่ฆ๏ผๅฏไปฅๆดๆน่็ฑป้ฎใๅฆๆไธไธชๅฎๅ
จ่็ฑป็่กจ็ปง็ปญ่ฟ่กๆๅๆๆฐๆฎๆไฝ่ฏญ่จๆไฝ๏ผๅฆ INSERTใUPDATEใDELETE๏ผ๏ผๅฎๅฏ่ฝไผๅๅพๆททไนฑ๏ผๆจๅฐ้่ฆ้ๆฐ่็ฑป่กจๆฅไฟฎๅคๆททไนฑใๆดๅคไฟกๆฏ๏ผ่ฏทๅ้
[่็ฑป้ฎ](/sql/sql-commands/ddl/clusterkey/)ใ |
0 commit comments