国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Trino實(shí)戰(zhàn)】Hive connector功能性文檔

這篇具有很好參考價(jià)值的文章主要介紹了【Trino實(shí)戰(zhàn)】Hive connector功能性文檔。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Hive connector功能性文檔


Trino需要使用Hive下的 元數(shù)據(jù)服務(wù)(HMS)和對(duì)象存儲(chǔ)系統(tǒng)(HDFS),協(xié)調(diào)器和所有的工作機(jī)需要和他們是保證網(wǎng)絡(luò)暢通。

該連接器提供對(duì)配置的對(duì)象存儲(chǔ)系統(tǒng)和元數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)和元數(shù)據(jù)的讀取訪問和寫入訪問:

  • 全局可用語句
  • 讀操作
  • 寫操作
  • 安全操作
  • 事務(wù)

SQL語言上的支持

基礎(chǔ)使用案例

創(chuàng)建內(nèi)部表

在catalog為hive下名為testdb的schema中創(chuàng)建一個(gè)名為page_views的Hive表,該表使用ORC文件格式存儲(chǔ),按ds和country進(jìn)行分區(qū),并按用戶分成50個(gè)桶。注意,Hive要求分區(qū)列是表中的最后一列:

CREATE TABLE hive.testdb.page_views (
  view_time timestamp,
  user_id bigint,
  page_url varchar,
  ds date,
  country varchar
)
WITH (
  format = 'ORC',
  partitioned_by = ARRAY['ds', 'country'],
  bucketed_by = ARRAY['user_id'],
  bucket_count = 50
)
創(chuàng)建庫

創(chuàng)建一個(gè)新的名為web的Hive schema,將表存儲(chǔ)在S3下一個(gè)名為my-bucket的路徑中,with用來指定location。

CREATE SCHEMA hive.web
WITH (location = 's3://my-bucket/')
刪除庫

刪除schema

DROP SCHEMA example.web
新增分區(qū)
CALL hive.system.create_empty_partition(
    schema_name => 'testdb',
    table_name => 'page_views',
    partition_columns => ARRAY['ds', 'country'],
    partition_values => ARRAY['2023-05-26', 'CN']);
查詢表中的分區(qū)列表
SELECT * FROM hive.testdb."page_views$partitions"
刪除分區(qū)

刪除表中的一個(gè)分區(qū)

DELETE FROM hive.testdb.page_views
WHERE ds = DATE '2023-05-26'
  AND country = 'CN'
全表查詢
SELECT * FROM hive.testdb.page_views
創(chuàng)建外部表

創(chuàng)建一個(gè)名為request_logs的外部Hive表,指向S3中的現(xiàn)有數(shù)據(jù):

CREATE TABLE example.web.request_logs (
  request_time timestamp,
  url varchar,
  ip varchar,
  user_agent varchar
)
WITH (
  format = 'TEXTFILE',
  external_location = 's3://my-bucket/data/logs/'
)
分析表

收集request_logs表的統(tǒng)計(jì)數(shù)據(jù):

ANALYZE hive.testdb.page_views
  
ANALYZE hive.testdb.page_views WITH (partitions = ARRAY[ARRAY['2023-05-26','CN']]);

刪除外部表

刪除外部表 request_logs。這只是刪除了該表的元數(shù)據(jù)。被引用的數(shù)據(jù)目錄不會(huì)被刪除:

DROP TABLE example.web.request_logs
創(chuàng)建事務(wù)表

CREATE TABLE AS可以用來創(chuàng)建ORC格式的事務(wù)表,像這樣:

CREATE TABLE <name>
WITH (
    format='ORC',
    transactional=true
)
AS <query>
刪除page_views表的一個(gè)分區(qū)的統(tǒng)計(jì)信息

刪除page_views表的一個(gè)分區(qū)的統(tǒng)計(jì)信息:

CALL hive.system.drop_stats(
    schema_name => 'testdb',
    table_name => 'page_views',
    partition_values => ARRAY[ARRAY['2023-05-26', 'CN']]);

程序

使用CALL語句來執(zhí)行數(shù)據(jù)操作或管理任務(wù)。如果你的Hive catalog被稱為web,那么程序必須包括一個(gè)合格的catalog名稱:

CALL web.system.example_procedure()

有以下程序可供選擇:

  • system.create_empty_partition(schema_name, table_name, partition_columns, partition_values):在指定的表中創(chuàng)建一個(gè)空分區(qū)。

  • system.sync_partition_metadata(schema_name, table_name, mode, case_sensitive):檢查和更新元存儲(chǔ)中的分區(qū)列表。有三種模式可供選擇:

    • ADD:添加任何存在于文件系統(tǒng)中,但不在元存儲(chǔ)中的分區(qū)。
    • DROP:丟棄任何存在于元存儲(chǔ)中,但不存在于文件系統(tǒng)中的分區(qū)。
    • FULL:同時(shí)執(zhí)行ADD和DROP。

    參數(shù)case_sensitive是可選的。為了與Hive的MSCK REPAIR TABLE行為兼容,默認(rèn)值為true,它希望文件系統(tǒng)路徑中的分區(qū)列名使用小寫(例如col_x=SomeValue)。文件系統(tǒng)中不符合這一慣例的分區(qū)會(huì)被忽略,除非該參數(shù)被設(shè)置為false

  • system.drop_stats(schema_name, table_name, partition_values):丟棄一個(gè)分區(qū)子集或整個(gè)表的統(tǒng)計(jì)數(shù)據(jù)。分區(qū)被指定為一個(gè)數(shù)組,其元素是分區(qū)值的數(shù)組(類似于create_empty_partition中的partition_values參數(shù))。如果省略了partition_values參數(shù),則會(huì)放棄整個(gè)表的統(tǒng)計(jì)信息。

  • system.register_partition(schema_name, table_name, partition_columns, partition_values, location)

    將現(xiàn)有的位置注冊(cè)為指定表的元存儲(chǔ)中的一個(gè)新分區(qū)。

    當(dāng)省略location參數(shù)時(shí),分區(qū)位置是使用partition_columnspartition_values構(gòu)建的。

    由于安全原因,只有當(dāng)hive.allow-register-partition-procedure被設(shè)置為 true 時(shí),該程序才會(huì)被啟用。

  • system.unregister_partition(schema_name, table_name, partition_columns, partition_values):在元存儲(chǔ)中為指定的表取消注冊(cè)現(xiàn)有的分區(qū)。分區(qū)數(shù)據(jù)不被刪除。

  • system.flush_metadata_cache():刷新所有的Hive元數(shù)據(jù)緩存。

  • system.flush_metadata_cache(schema_name => ..., table_name => ...):刷新與選定表相關(guān)的Hive元數(shù)據(jù)緩存條目。該過程需要傳遞命名的參數(shù)

  • system.flush_metadata_cache(schema_name => ..., table_name => ..., partition_columns => ARRAY[...], partition_values => ARRAY[...]):刷新與選定分區(qū)相關(guān)的Hive元數(shù)據(jù)緩存條目。該過程需要傳遞命名參數(shù)。

數(shù)據(jù)管理

一些數(shù)據(jù)管理語句可能會(huì)受到Hive目錄的授權(quán)檢查策略的影響。在默認(rèn)的傳統(tǒng)策略中,一些語句被默認(rèn)禁用。更多信息請(qǐng)參見Hive連接器安全配置。

數(shù)據(jù)管理功能包括對(duì)INSERT、UPDATE、DELETEMERGE語句的支持,具體支持情況取決于存儲(chǔ)系統(tǒng)、文件格式和元存儲(chǔ)。

當(dāng)連接到3.x版本的Hive元存儲(chǔ)時(shí),Hive連接器支持從只寫表ACID表中讀取和寫入,并完全支持分區(qū)和分桶。

DELETE:只有當(dāng)表被分區(qū)且WHERE子句匹配整個(gè)分區(qū)時(shí),才支持應(yīng)用于非事務(wù)表的DELETE。具有ORC格式的事務(wù)型Hive表支持 "逐行 "刪除,其中的WHERE子句可以匹配任意的行集。

UPDATE:只有格式為ORC的事務(wù)性Hive表才支持UPDATE。不支持分區(qū)或桶列的UPDATE。

MERGE:只支持ACID表。

不支持使用Hive Streaming Ingest(Hive 3)創(chuàng)建的ACID表。

Schema與表管理

Hive連接器支持查詢和操作Hive表和模式(數(shù)據(jù)庫)。雖然有些不常見的操作必須直接使用Hive進(jìn)行,但大多數(shù)操作都可以使用Trino進(jìn)行。

模式演化

Hive允許一個(gè)表中的分區(qū)擁有與表不同的模式。當(dāng)一個(gè)表的列類型在分區(qū)已經(jīng)存在(使用原來的列類型)之后被改變時(shí),就會(huì)出現(xiàn)這種情況。Hive連接器通過允許與Hive相同的轉(zhuǎn)換來支持這種情況:

  • varchartinyint、smallintintegerbigint之間的轉(zhuǎn)換

  • realtodouble

  • 整數(shù)的擴(kuò)展轉(zhuǎn)換,比如tinyintsmallint

任何轉(zhuǎn)換失敗的結(jié)果都是null,這與Hive的行為相同。例如,將字符串’foo’轉(zhuǎn)換為數(shù)字,或者將字符串’1234’轉(zhuǎn)換為tinyint(其最大值為127)。

Avro模式的演變

Trino支持查詢和操作具有Avro存儲(chǔ)格式的Hive表,它的模式設(shè)置是基于Avro模式file/literal。Trino也能夠通過從位于本地或遠(yuǎn)程HDFS/Web服務(wù)器中的有效Avro模式文件推斷出模式,從而在Trino中創(chuàng)建表。

要指定Avro模式應(yīng)該被用來解釋表數(shù)據(jù),請(qǐng)使用avro_schema_url表屬性。

模式可以放在本地文件系統(tǒng)中,也可以遠(yuǎn)程放在以下位置:

  • HDFS(例如,avro_schema_url = 'hdfs://user/avro/schema/avro_data.avsc')

  • S3(例如,avro_schema_url = 's3n:///schema_bucket/schema/avro_data.avsc')

  • 一個(gè)網(wǎng)絡(luò)服務(wù)器(例如,avro_schema_url = 'http://example.org/schema/avro_data.avsc')。

模式所在的URL必須能夠從Hive元存儲(chǔ)和Trino協(xié)調(diào)器/工作節(jié)點(diǎn)中訪問。

另外,你也可以使用表屬性avro_schema_literal來定義Avro模式。

在Trino中使用avro_schema_urlavro_schema_literal屬性創(chuàng)建的表與設(shè)置了avro.schema.urlavro.schema.literal的Hive表的行為方式相同。

例子:

CREATE TABLE example.avro.avro_data (
   id bigint
 )
WITH (
   format = 'AVRO',
   avro_schema_url = '/usr/local/avro_data.avsc'
)

如果指定了avro_schema_url,那么在DDL中列出的列(上面例子中的id)將被忽略。表的模式與Avro模式文件中的模式相匹配。在任何讀取操作之前,Avro模式被訪問,所以查詢結(jié)果反映了模式的任何變化。因此,Trino利用了Avro的后向兼容能力。

如果表的模式在Avro模式文件中發(fā)生變化,新的模式仍然可以用來讀取舊的數(shù)據(jù)。新添加/重命名的字段在Avro模式文件中必須有一個(gè)默認(rèn)值。

架構(gòu)演變行為如下:

  • 在新模式中添加的列: 當(dāng)表使用新模式時(shí),用舊模式創(chuàng)建的數(shù)據(jù)產(chǎn)生一個(gè)默認(rèn)值。

  • 在新模式中刪除列: 用舊模式創(chuàng)建的數(shù)據(jù)不再輸出被移除的列的數(shù)據(jù)。

  • 列在新模式中被重新命名: 這相當(dāng)于刪除列并添加一個(gè)新的列,當(dāng)表使用新模式時(shí),用舊模式創(chuàng)建的數(shù)據(jù)產(chǎn)生一個(gè)默認(rèn)值。

  • 在新的模式中改變列的類型: 如果Avro或Hive連接器支持類型強(qiáng)制,那么就會(huì)進(jìn)行轉(zhuǎn)換。對(duì)于不兼容的類型,會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

限制條件

當(dāng)avro_schema_url被設(shè)置時(shí),以下操作不被支持:

  • 不支持CREATE TABLE AS。
  • CREATE TABLE中不支持Bucketing(bucketed_by)列。
  • 不支持修改列的ALTER TABLE命令。
ALTER TABLE EXECUTE

連接器支持與ALTER TABLE EXECUTE一起使用的優(yōu)化命令。

優(yōu)化命令用于重寫指定的非事務(wù)表的內(nèi)容,以便將其合并為更少但更大的文件。如果表是分區(qū)的,數(shù)據(jù)壓縮將分別作用于為優(yōu)化而選擇的每個(gè)分區(qū)。這個(gè)操作提高了讀取性能。

所有大小低于可選的file_size_threshold參數(shù)(閾值的默認(rèn)值是100MB)的文件被合并:

ALTER TABLE test_table EXECUTE optimize

下面的語句合并了表內(nèi)大小在10兆字節(jié)以下的文件:

ALTER TABLE test_table EXECUTE optimize(file_size_threshold => '10MB')

你可以使用一個(gè)WHERE子句,用用于分區(qū)表的列,來過濾哪些分區(qū)被優(yōu)化:

ALTER TABLE test_partitioned_table EXECUTE optimize
WHERE partition_key = 1

優(yōu)化命令默認(rèn)是禁用的,可以通過<catalog-name>.non_transactional_optimize_enabled會(huì)話屬性為一個(gè)目錄啟用:

SET SESSION <catalog_name>.non_transactional_optimize_enabled=true

由于Hive表是非事務(wù)性的,請(qǐng)注意以下可能的結(jié)果:

如果對(duì)當(dāng)前正在優(yōu)化的表運(yùn)行查詢,可能會(huì)讀取重復(fù)的行。

在極少數(shù)情況下,在optimize操作過程中出現(xiàn)異常,需要手動(dòng)清理表的目錄。在這種情況下,參考Trino日志和查詢失敗信息,看看哪些文件必須被刪除。

表屬性

表屬性為底層表提供或設(shè)置元數(shù)據(jù)。這是CREATE TABLE AS語句的關(guān)鍵。表的屬性是通過WITH子句傳遞給連接器的:

CREATE TABLE tablename
WITH (format='CSV',
      csv_escape = '"')

Hive connector table properties

Property name Description Default
auto_purge 指示配置的元存儲(chǔ)在刪除表或分區(qū)時(shí)執(zhí)行清除,而不是使用回收站進(jìn)行軟刪除。
avro_schema_url 指向表的Avro schema evolution的URI。
bucket_count 數(shù)據(jù)分組的桶的數(shù)量。只在與bucketed_by一起使用時(shí)有效。 0
bucketed_by 存儲(chǔ)表的bucketing列。只在與bucket_count一起使用時(shí)有效。 []
bucketing_version 指定使用哪一個(gè)Hive bucketing版本。有效值是12
csv_escape CSV轉(zhuǎn)義字符. Requires CSV format.
csv_quote CSV引號(hào)字符. Requires CSV format.
csv_separator CSV的分隔符。要求是CSV格式。你可以使用其他分隔符,如` ,或使用Unicode配置隱形分隔符,如用U&‘\0009’`的標(biāo)簽。
external_location S3、Azure Blob存儲(chǔ)等的外部Hive表的URI。 See the Basic usage examples for more information.
format 表的文件格式。有效值包括ORC, PARQUET, AVRO, RCBINARY, RCTEXT, SEQUENCEFILE, JSON, TEXTFILE, CSV, 和 REGEX。目錄屬性hive.storage-format設(shè)置了默認(rèn)值,可以將其改為不同的默認(rèn)值。
null_format `NULL’值的序列化格式。需要TextFile, RCText, 或SequenceFile格式。
orc_bloom_filter_columns 逗號(hào)分隔的列列表,用于ORC bloom過濾器。它提高了讀取ORC文件時(shí)使用范圍謂詞的查詢性能。Requires ORC format. []
orc_bloom_filter_fpp The ORC bloom filters false positive probability. Requires ORC format. 0.05
partitioned_by 存儲(chǔ)表的分區(qū)列。在partitioned_by子句中列出的列必須是DDL中定義的最后一列。 []
skip_footer_line_count 在解析文件的數(shù)據(jù)時(shí)要忽略的頁腳行數(shù)。 Requires TextFile or CSV format tables.
skip_header_line_count 在解析文件的數(shù)據(jù)時(shí)要忽略的標(biāo)題行數(shù)。 Requires TextFile or CSV format tables.
sorted_by 要排序的列,以確定行的bucketing。只有在指定了bucketed_bybucket_count時(shí)才有效。 []
textfile_field_separator 允許對(duì)TextFile格式的表格使用自定義字段分隔符,如’|'。
textfile_field_separator_escape 允許對(duì)TextFile格式的表格使用自定義轉(zhuǎn)義字符。
transactional 將此屬性設(shè)置為true以創(chuàng)建一個(gè)ORC ACID事務(wù)表。Requires ORC format. 對(duì)于使用舊版本的Hive創(chuàng)建的僅供插入的表,該屬性可能顯示為true。
partition_projection_enabled 啟用所選表的分區(qū)投影。從AWS Athena表屬性projection.enabled映射過來。
partition_projection_ignore 忽略任何存儲(chǔ)在元存儲(chǔ)中的選定表的分區(qū)投影屬性。這是一個(gè)Trino專用的屬性,允許你在特定的表上解決兼容性問題,如果啟用,Trino會(huì)忽略所有其他與分區(qū)投影有關(guān)的配置選項(xiàng)。
partition_projection_location_template 預(yù)測(cè)的分區(qū)位置模板,如s3a://test/name=${name}/。從AWS Athena表屬性storage.location.template中映射出來 ${table_location}/${partition_name}
extra_properties 添加到Hive表中的額外屬性。這些屬性不被Trino使用,可以在$properties元數(shù)據(jù)表中找到。這些屬性不包括在SHOW CREATE TABLE語句的輸出中。
Metadata tables

原始的Hive表屬性可以作為一個(gè)隱藏的表,每個(gè)表屬性包含一個(gè)單獨(dú)的列,單行包含屬性值。屬性表的名稱與附加了$properties的表的名稱相同。

你可以用一個(gè)簡(jiǎn)單的查詢來檢查屬性名稱和值:

SELECT * FROM hive.testdb."page_views$properties";
Column properties

Hive connector column properties

Property name Description Default
partition_projection_type 定義在此列上使用的分區(qū)投影的類型。只可以在分區(qū)列上使用??捎玫念愋停?enum, integer, date, injected. 從AWS Athena表屬性projection.${columnName}.type映射過來。
partition_projection_values partition_projection_type設(shè)置為ENUM一起使用。包含一個(gè)用于生成分區(qū)的靜態(tài)值列表。從AWS Athena表屬性projection.${columnName}.values映射過來。
partition_projection_range partition_projection_type設(shè)置為INTEGERDATE一起使用,定義一個(gè)范圍。它是一個(gè)雙元素?cái)?shù)組,描述了用于生成分區(qū)的最小和最大范圍值。生成從最小值開始,然后通過定義的partition_projection_interval遞增到最大值。例如,對(duì)于 “partition_projection_type “的 “INTEGER”,格式是”[‘1’, ‘4’]”;對(duì)于 “partition_projection_type “的 “DATE”,格式是”[‘2001-01-01’, ‘2001-01-07’]“或”`NOW-3DAYS’, ‘NOW’”。從AWS Athena表屬性projection.${columnName}.range映射出來。
partition_projection_interval partition_projection_type設(shè)置為INTEGERDATE一起使用。它表示用于在給定范圍partition_projection_range內(nèi)生成分區(qū)的時(shí)間間隔。從AWS Athena表屬性projection.${columnName}.interval映射過來。
partition_projection_digits partition_projection_type設(shè)置為INTEGER一起使用。整數(shù)列投影要使用的數(shù)字。從AWS Athena表屬性projection.${columnName}.digits映射過來。
partition_projection_format partition_projection_type設(shè)置為DATE時(shí)使用。日期列的投影格式,定義為字符串,如yyyy MMMM-dd-yy HH:mm:ss,用于Java DateTimeFormatter類。從AWS Athena表屬性projection.${columnName}.format映射過來。
partition_projection_interval_unit partition_projection_type=DATA一起使用。partition_projection_interval中給出的日期列投影范圍間隔單位。從AWS Athena表屬性projection.${columnName}.interval.unit映射過來。
Metadata columns

除了定義的列之外,Hive連接器還在每個(gè)表中的一些隱藏列中主動(dòng)展示元數(shù)據(jù):

  • $bucket: 該行的桶號(hào)

  • $path: 該行的文件的完整文件系統(tǒng)路徑名稱

  • $file_modified_time: 這一行的文件最后修改的日期和時(shí)間

  • $file_size: 這一行的文件大小

  • $partition: 此行的分區(qū)名稱

你可以像其他列一樣在你的SQL語句中使用這些列。它們可以被直接選擇,或在條件語句中使用。例如,你可以檢查每條記錄的文件大小、位置和分區(qū):

SELECT *, "$path", "$file_size", "$partition"
FROM hive.testdb.page_views;

檢索屬于存儲(chǔ)在分區(qū)ds=2016-08-09/country=US中的文件的所有記錄:

SELECT *, "$path", "$file_size"
FROM hive.testdb.page_views
WHERE "$partition" = 'ds=2023-05-26/country=CN'

視圖管理

Trino允許從Hive物化視圖中讀取數(shù)據(jù),并且可以配置為支持讀取Hive視圖。

物化視圖

Hive連接器支持從Hive物化視圖中讀取數(shù)據(jù)。在Trino中,這些視圖是作為普通的、只讀的表呈現(xiàn)的。

Hive視圖

Hive視圖在HiveQL中定義,并存儲(chǔ)在Hive Metastore服務(wù)中。它們被分析為允許對(duì)數(shù)據(jù)進(jìn)行讀取訪問。

Hive連接器包括支持以三種不同的模式來讀取Hive視圖。

  • Disabled
  • Legacy
  • Experimental

可以在目錄屬性文件中配置該行為。

默認(rèn)情況下,Hive視圖是以RUN AS DEFINER安全模式執(zhí)行的。將hive.hive-views.run-as-invoker目錄配置屬性設(shè)置為true,以使用RUN AS INVOKER語義。

Disabled

默認(rèn)行為是忽略Hive視圖。這意味著你在視圖中編碼的業(yè)務(wù)邏輯和數(shù)據(jù)在Trino中是不可用的。

Legacy

可以用hive.hive-views.enabled=truehive.hive-views.legacy-translation=true啟用一個(gè)非常簡(jiǎn)單的實(shí)現(xiàn)來執(zhí)行Hive視圖,從而允許在Trino中讀取數(shù)據(jù)。

對(duì)于臨時(shí)使用特定目錄的遺留行為,你可以將hive_views_legacy_translation目錄會(huì)話屬性設(shè)置為true。

該傳統(tǒng)行為將任何定義視圖的HiveQL查詢解釋為用SQL編寫。它不做任何翻譯,而是依賴于HiveQL與SQL非常相似的事實(shí)。

這對(duì)于非常簡(jiǎn)單的Hive視圖來說是可行的,但對(duì)于更復(fù)雜的查詢來說可能會(huì)導(dǎo)致問題。例如,如果一個(gè)HiveQL函數(shù)有相同的簽名,但與SQL版本有不同的行為,那么返回的結(jié)果可能會(huì)有所不同。在更極端的情況下,查詢可能會(huì)失敗,甚至不能被解析和執(zhí)行。

Experimental

新的行為被設(shè)計(jì)得更好,并有可能變得比傳統(tǒng)的實(shí)現(xiàn)更強(qiáng)大。它可以分析、處理和重寫Hive視圖以及包含的表達(dá)式和語句。

它支持以下Hive視圖功能:

  • 針對(duì)Hive視圖的UNION [DISTINCT] 和 UNION ALL

  • 嵌套的GROUP BY條款

  • current_user()

  • LATERAL VIEW OUTER EXPLODE

  • LATERAL VIEW [OUTER] EXPLODE on array of struct

  • LATERAL VIEW json_tuple

你可以用hive.hive-views.enabled=true來啟用實(shí)驗(yàn)性行為。刪除hive.hive-views.legacy-translation屬性或?qū)⑵湓O(shè)置為false以確保legacy不被啟用。

在試驗(yàn)這一功能時(shí),請(qǐng)記住,許多功能尚未實(shí)現(xiàn)。以下是一個(gè)不完整的缺失功能列表:

  • HiveQL的current_date、current_timestamp及其他

  • Hive函數(shù)調(diào)用,包括translate()、窗口函數(shù)等

  • 常見的表格表達(dá)式和簡(jiǎn)單的案例表達(dá)式

  • 時(shí)間戳的精度設(shè)置

  • 支持所有的Hive數(shù)據(jù)類型以及與Trino類型的正確映射

  • 能夠處理自定義的UDFs

Trino SQL與HiveQL上的不同

Trino使用ANSI SQL的語法和語義,而Hive使用一種類似于SQL的語言,稱為HiveQL,它是松散地仿照MySQL(它本身與ANSI SQL有許多不同之處)。

使用下標(biāo)來訪問一個(gè)數(shù)組的動(dòng)態(tài)索引,而不是使用udf

SQL中的下標(biāo)運(yùn)算符支持完整的表達(dá)式,而不像Hive(只支持常量)。因此,你可以寫這樣的查詢:

SELECT my_array[CARDINALITY(my_array)] as last_element
FROM ...

避免數(shù)組的越界訪問

訪問數(shù)組中的界外元素將導(dǎo)致一個(gè)異常。你可以用一個(gè)if來避免這種情況,如下所示

SELECT IF(CARDINALITY(my_array) >= 3, my_array[3], NULL)
FROM ...

對(duì)數(shù)組使用ANSI SQL語法

數(shù)組的索引是從1開始的,而不是從0開始

SELECT my_array[1] AS first_element
FROM ...

用ANSI語法構(gòu)造數(shù)組:

SELECT ARRAY[1, 2, 3] AS my_array

對(duì)標(biāo)識(shí)符和字符串使用ANSI SQL語法

字符串用單引號(hào)分隔,標(biāo)識(shí)符用雙引號(hào)引出,而不是反引號(hào):

SELECT name AS "User Name"
FROM "7day_active"
WHERE name = 'foo'

以數(shù)字開頭的報(bào)價(jià)標(biāo)識(shí)符

在ANSI SQL中,以數(shù)字開頭的標(biāo)識(shí)符是不合法的,必須使用雙引號(hào)進(jìn)行引用:

SELECT *
FROM "7day_active"

使用標(biāo)準(zhǔn)的字符串連接操作符

使用ANSI SQL的字符串連接操作符:

SELECT a || b || c
FROM ...

對(duì)CAST目標(biāo)使用標(biāo)準(zhǔn)類型

CAST目標(biāo)支持以下標(biāo)準(zhǔn)類型:

SELECT
  CAST(x AS varchar)
, CAST(x AS bigint)
, CAST(x AS double)
, CAST(x AS boolean)
FROM ...

特別是,使用VARCHAR而不是STRING。

整數(shù)除法時(shí)使用 CAST

Trino在除以兩個(gè)整數(shù)時(shí)遵循執(zhí)行整數(shù)除法的標(biāo)準(zhǔn)行為。例如,7除以2的結(jié)果是3,而不是3.5。要對(duì)兩個(gè)整數(shù)進(jìn)行浮點(diǎn)除法,應(yīng)將其中一個(gè)整數(shù)投給一個(gè)雙數(shù):

SELECT CAST(5 AS DOUBLE) / 2

對(duì)復(fù)雜的表達(dá)式或查詢使用 WITH

當(dāng)你想重新使用一個(gè)復(fù)雜的輸出表達(dá)式作為過濾器時(shí),可以使用內(nèi)聯(lián)子查詢或使用WITH子句將其分解:

WITH a AS (
  SELECT substr(name, 1, 3) x
  FROM ...
)
SELECT *
FROM a
WHERE x = 'foo'

使用UNNEST來擴(kuò)展數(shù)組和集合

Trino支持UNNEST來擴(kuò)展數(shù)組和集合。使用UNNEST而不是LATERAL VIEW explode()。

Hive query:

SELECT student, score
FROM tests
LATERAL VIEW explode(scores) t AS score;

Trino query:

SELECT student, score
FROM tests
CROSS JOIN UNNEST(scores) AS t (score);

對(duì)日期和時(shí)間的INTERVAL表達(dá)式使用ANSI SQL語法

Trino支持ANSI SQL風(fēng)格的INTERVAL表達(dá)式,與Hive中使用的實(shí)現(xiàn)方式不同。

  • INTERVAL關(guān)鍵字是必須的,不是可有可無的。

  • 日期和時(shí)間單位必須是單數(shù)。例如day,而不是days。

  • 值必須有引號(hào)。

Hive查詢:

SELECT cast('2000-08-19' as date) + 14 days;

等效的Trino查詢:

SELECT cast('2000-08-19' as date) + INTERVAL '14' day

使用 datediff 的注意點(diǎn)

Hive datediff函數(shù)返回兩個(gè)日期之間的天數(shù)差,其聲明如下:

datediff(string enddate, string startdate) -> integer

相等的Trino函數(shù)date_diff對(duì)兩個(gè)日期參數(shù)使用相反的順序,并且需要一個(gè)單位。在遷移時(shí)必須考慮到這一點(diǎn):

Hive查詢:

datediff(enddate, startdate)

Trino查詢:

date_diff('day', startdate, enddate)

在插入時(shí)覆蓋數(shù)據(jù)

默認(rèn)情況下,INSERT查詢是不允許覆蓋現(xiàn)有數(shù)據(jù)的。你可以使用目錄會(huì)話屬性insert_existing_partitions_behavior來允許覆寫。在使用Hive連接器的目錄名稱前加上前綴,例如hdfs,并在運(yùn)行插入查詢之前在會(huì)話中設(shè)置該屬性:

SET SESSION hdfs.insert_existing_partitions_behavior = 'OVERWRITE';
INSERT INTO hdfs.schema.table ...

產(chǎn)生的行為等同于在Hive中使用INSERT OVERWRITE。

當(dāng)表存儲(chǔ)在加密的HDFS上,當(dāng)表是未分區(qū)的或者表是事務(wù)性的,Trino不支持插入覆蓋操作。


支持容錯(cuò)執(zhí)行

該連接器支持查詢處理的容錯(cuò)執(zhí)行。在非事務(wù)表上的任何重試策略下都支持讀和寫操作。

讀取操作在事務(wù)表上支持任何重試策略。寫操作和CREATE TABLE … AS操作不支持在事務(wù)表上的任何重試策略。可以通過部署配置啟動(dòng)外部數(shù)據(jù)緩存加強(qiáng)容錯(cuò)執(zhí)行。


性能

表的統(tǒng)計(jì)信息

Hive連接器支持收集和管理表的統(tǒng)計(jì)數(shù)據(jù)以提高查詢處理性能。

在寫入數(shù)據(jù)時(shí),Hive連接器總是收集基本的統(tǒng)計(jì)數(shù)據(jù)(numFiles, numRows, rawDataSize, totalSize),默認(rèn)情況下也會(huì)收集列級(jí)的統(tǒng)計(jì)數(shù)據(jù):

Column type Collectible statistics
TINYINT 空值的數(shù)量,不同值的數(shù)量,最小/最大值
SMALLINT 空值的數(shù)量,不同值的數(shù)量,最小/最大值
INTEGER 空值的數(shù)量,不同值的數(shù)量,最小/最大值
BIGINT 空值的數(shù)量,不同值的數(shù)量,最小/最大值
DOUBLE 空值的數(shù)量,不同值的數(shù)量,最小/最大值
REAL 空值的數(shù)量,不同值的數(shù)量,最小/最大值
DECIMAL 空值的數(shù)量,不同值的數(shù)量,最小/最大值
DATE 空值的數(shù)量,不同值的數(shù)量,最小/最大值
TIMESTAMP 空值的數(shù)量,不同值的數(shù)量,最小/最大值
VARCHAR 空值的數(shù)量,不同值的數(shù)量,
CHAR 空值的數(shù)量,不同值的數(shù)量,
VARBINARY 空值的數(shù)量
BOOLEAN 空值的數(shù)量,True/False值的數(shù)量,
更新表和分區(qū)的統(tǒng)計(jì)數(shù)據(jù)

如果你的查詢很復(fù)雜,包括連接大型數(shù)據(jù)集,在表/分區(qū)上運(yùn)行ANALYZE可能會(huì)通過收集數(shù)據(jù)的統(tǒng)計(jì)信息來提高查詢性能。

當(dāng)分析一個(gè)分區(qū)表時(shí),可以通過可選的分區(qū)屬性來指定要分析的分區(qū),分區(qū)屬性是一個(gè)數(shù)組,包含分區(qū)鍵的值,其順序是在表模式中聲明的:

ANALYZE table_name WITH (
    partitions = ARRAY[
        ARRAY['p1_value1', 'p1_value2'],
        ARRAY['p2_value1', 'p2_value2']])

這個(gè)查詢將收集兩個(gè)分區(qū)的統(tǒng)計(jì)數(shù)據(jù),鍵值為p1_value1, p1_value2和p2_value1, p2_value2。

在寬表上,收集所有列的統(tǒng)計(jì)數(shù)據(jù)可能很昂貴,并對(duì)查詢計(jì)劃產(chǎn)生不利影響。它通常也是不必要的–統(tǒng)計(jì)數(shù)據(jù)只對(duì)特定的列有用,比如連接鍵、謂詞、分組鍵。我們可以通過可選的列屬性指定要分析的列的子集:

ANALYZE table_name WITH (
    partitions = ARRAY[ARRAY['p2_value1', 'p2_value2']],
    columns = ARRAY['col_1', 'col_2'])

這個(gè)查詢收集了鍵值為p2_value1, p2_value2的分區(qū)的col_1和col_2列的統(tǒng)計(jì)信息。

請(qǐng)注意,如果以前收集了所有列的統(tǒng)計(jì)數(shù)據(jù),那么在重新分析一個(gè)子集之前,必須放棄它們:

CALL system.drop_stats('schema_name', 'table_name')

你也可以只刪除選定分區(qū)的統(tǒng)計(jì)數(shù)據(jù):

CALL system.drop_stats(
    schema_name => 'schema',
    table_name => 'table',
    partition_values => ARRAY[ARRAY['p2_value1', 'p2_value2']])

動(dòng)態(tài)過濾

Hive連接器支持動(dòng)態(tài)過濾優(yōu)化。對(duì)于以任何文件格式存儲(chǔ)的分區(qū)表,支持動(dòng)態(tài)分區(qū)修剪,用于廣播和分區(qū)連接。對(duì)于以任何文件格式存儲(chǔ)的桶狀表,僅支持廣播連接的動(dòng)態(tài)桶狀修剪。

對(duì)于以O(shè)RC或Parquet文件格式存儲(chǔ)的表,動(dòng)態(tài)過濾器也被推送到工作節(jié)點(diǎn)的本地表掃描中,用于廣播連接。推送到ORC和Parquet讀取器中的動(dòng)態(tài)過濾器謂詞被用來執(zhí)行條帶或行組修剪并節(jié)省磁盤I/O。在ORC或Parquet文件中按連接標(biāo)準(zhǔn)中使用的列對(duì)數(shù)據(jù)進(jìn)行排序,可以顯著提高條帶或行組修剪的有效性。這是因?yàn)樵谕粭l帶或行組內(nèi)對(duì)類似的數(shù)據(jù)進(jìn)行分組,可以極大地提高在條帶或行組級(jí)別維護(hù)的最小/最大索引的選擇性。

延遲執(zhí)行動(dòng)態(tài)過濾器

在開始表掃描之前,等待動(dòng)態(tài)過濾器的收集往往是有益的。如果動(dòng)態(tài)過濾能夠減少掃描的數(shù)據(jù)量,那么這種額外的等待時(shí)間可能會(huì)在查詢和CPU時(shí)間上帶來巨大的節(jié)省。

對(duì)于Hive連接器,通過使用目錄文件中的配置屬性hive.dynamic-filtering.wait-timeout或目錄會(huì)話屬性<hive-catalog>.dynamic_filtering_wait_timeout,可以將表掃描延遲到收集動(dòng)態(tài)過濾器的時(shí)間。

存儲(chǔ)緩存

使用Hive連接器查詢對(duì)象存儲(chǔ)是Trino的一個(gè)非常常見的用例。它經(jīng)常涉及到大量數(shù)據(jù)的傳輸。對(duì)象是由多個(gè)工作者從HDFS或任何其他支持的對(duì)象存儲(chǔ)中檢索出來的,并在這些工作者上進(jìn)行處理。帶有不同參數(shù)的重復(fù)查詢,甚至是來自不同用戶的不同查詢,經(jīng)常會(huì)訪問,并因此傳輸相同的對(duì)象。

好處

  • 降低對(duì)象存儲(chǔ)的負(fù)荷

    每一個(gè)被檢索和緩存的對(duì)象都避免了在后續(xù)查詢中從存儲(chǔ)中重復(fù)檢索。因此,對(duì)象存儲(chǔ)系統(tǒng)不必一次又一次地提供該對(duì)象。

    例如,如果你的查詢從存儲(chǔ)中訪問100MB的對(duì)象,在查詢第一次運(yùn)行時(shí),100MB被下載和緩存。任何后續(xù)查詢都會(huì)使用這些對(duì)象。如果你的用戶再運(yùn)行100個(gè)查詢,訪問相同的對(duì)象,你的存儲(chǔ)系統(tǒng)就不必做任何重要的工作。如果沒有緩存,它必須一次又一次地提供相同的對(duì)象,導(dǎo)致10GB的總存儲(chǔ)服務(wù)。

    這種對(duì)對(duì)象存儲(chǔ)的負(fù)載減少也會(huì)影響對(duì)象存儲(chǔ)系統(tǒng)的大小,從而影響其成本。

  • 提高查詢性能

    緩存可以提供顯著的性能優(yōu)勢(shì),因?yàn)樗苊饬酥貜?fù)的網(wǎng)絡(luò)傳輸,而是從本地緩存中訪問對(duì)象的副本。如果直接訪問對(duì)象存儲(chǔ)的性能比訪問緩存的性能低,那么性能提升就更加顯著。

    例如,如果你在不同的網(wǎng)絡(luò)、不同的數(shù)據(jù)中心、甚至不同的云提供商區(qū)域訪問對(duì)象存儲(chǔ),查詢性能就會(huì)很慢。增加使用快速的本地存儲(chǔ)的緩存有很大的影響,使你的查詢速度大大加快。

    另一方面,如果你的對(duì)象存儲(chǔ)已經(jīng)在I/O和網(wǎng)絡(luò)訪問方面以非常高的性能運(yùn)行,而你的本地緩存存儲(chǔ)的速度類似,甚至更慢,那么性能方面的好處可能是最小的。

  • 降低查詢成本

    前面提到的減少對(duì)象存儲(chǔ)的負(fù)載的結(jié)果是大大減少了網(wǎng)絡(luò)流量。然而,網(wǎng)絡(luò)流量在設(shè)置中是一個(gè)相當(dāng)大的成本因素,特別是在公共云供應(yīng)商系統(tǒng)中托管時(shí)。

架構(gòu)

緩存可以在兩種模式下運(yùn)行。異步模式直接提供被查詢的數(shù)據(jù),并在之后異步地緩存任何對(duì)象。異步是默認(rèn)和推薦的模式。查詢不需要支付預(yù)熱緩存的費(fèi)用。緩存是在后臺(tái)填充的,如果緩存還沒有填充,查詢就會(huì)繞過緩存。任何請(qǐng)求緩存對(duì)象的后續(xù)查詢都會(huì)直接從緩存中得到服務(wù)。

另一種模式是緩存回調(diào)。在這種模式下,如果一個(gè)對(duì)象在緩存中沒有找到,它將從存儲(chǔ)中讀取,放在緩存中,然后提供給請(qǐng)求的查詢。在通讀模式下,查詢總是從高速緩存中讀取,并且必須等待高速緩存的填充。

在這兩種模式下,對(duì)象都被緩存在每個(gè)工作者的本地存儲(chǔ)中。工作者可以從其他工作者那里請(qǐng)求緩存的對(duì)象,以避免從對(duì)象存儲(chǔ)中請(qǐng)求。

緩存塊的大小為1MB,很適合ORC或Parquet文件格式。

配置

緩存功能是Hive連接器的一部分,可以在目錄屬性文件中激活:

connector.name=hive

hive.cache.enabled=true
hive.cache.location=/opt/hive-cache

緩存在協(xié)調(diào)器和所有訪問對(duì)象存儲(chǔ)的工作者上運(yùn)行。用于管理BookKeeper和數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)端口(默認(rèn)為8898和8899)需要是可用的。

要在多個(gè)目錄上使用緩存,你需要配置不同的緩存目錄和不同的BookKeeper和數(shù)據(jù)傳輸端口。

Cache Configuration Parameters

Property Description Default
hive.cache.enabled 切換以啟用或禁用緩存 false
hive.cache.location 用于每個(gè)工作者的緩存存儲(chǔ)的必要目錄位置。用逗號(hào)分隔多個(gè)目錄,這些目錄可以是單獨(dú)驅(qū)動(dòng)器的掛載點(diǎn)。更多提示可以在 recommendation 中找到。例如:hive.cache.location=/var/lib/trino/cache1,/var/lib/trino/cache2。
hive.cache.data-transfer-port 用于傳輸緩存管理的數(shù)據(jù)的TCP/IP端口。 8898
hive.cache.bookkeeper-port 管理緩存的BookKeeper使用的TCP/IP端口。 8899
hive.cache.read-mode 緩存的操作模式,如前面架構(gòu)部分所述。支持的模式是 "async"和 “read-through”。 async
hive.cache.ttl 緩存中的對(duì)象的保存時(shí)長。沒有被請(qǐng)求過TTL值的對(duì)象會(huì)從緩存中刪除。 7d
hive.cache.disk-usage-percentage 用于緩存數(shù)據(jù)的磁盤空間的百分比。 80

建議

本地緩存存儲(chǔ)的速度對(duì)緩存的性能至關(guān)重要。最常見和最經(jīng)濟(jì)的方法是安裝高性能的SSD磁盤或類似的磁盤。快速的緩存性能也可以用RAM磁盤作為內(nèi)存來實(shí)現(xiàn)。

在所有情況下,你應(yīng)該避免使用節(jié)點(diǎn)的根分區(qū)和磁盤,而是在每個(gè)節(jié)點(diǎn)上為緩存附加多個(gè)專用的存儲(chǔ)設(shè)備。緩存使用磁盤的比例是可配置的。存儲(chǔ)應(yīng)該是每個(gè)協(xié)調(diào)者和工作者節(jié)點(diǎn)上的本地存儲(chǔ)。在Trino啟動(dòng)之前,目錄需要存在。我們建議使用多個(gè)設(shè)備來提高緩存的性能。

連接的存儲(chǔ)設(shè)備的容量應(yīng)該比查詢的對(duì)象存儲(chǔ)工作負(fù)載的大小大20-30%左右。例如,你目前的查詢工作負(fù)載通常訪問HDFS存儲(chǔ)中的分區(qū),這些分區(qū)封裝了過去3個(gè)月的數(shù)據(jù)。這些分區(qū)的總體大小目前為1TB。因此,你的緩存驅(qū)動(dòng)器的總?cè)萘勘仨毷?.2TB或更大。

你對(duì)Trino的部署方法決定了如何創(chuàng)建用于緩存的目錄。通常情況下,你需要連接一個(gè)快速的存儲(chǔ)系統(tǒng),如SSD驅(qū)動(dòng)器,并確保它安裝在配置的路徑上。Kubernetes、CFT和其他系統(tǒng)允許通過卷來實(shí)現(xiàn)。

Metrics

為了驗(yàn)證緩存在你的系統(tǒng)上是如何工作的,你可以采取多種方法:

  • 檢查所有節(jié)點(diǎn)上的緩存存儲(chǔ)驅(qū)動(dòng)器的磁盤使用情況

  • 查詢由JMX公開的緩存系統(tǒng)的指標(biāo)

緩存的實(shí)現(xiàn)通過JMX暴露了一些指標(biāo)。你可以直接在Trino中用JMX連接器或在外部工具中檢查這些和其他指標(biāo)。

目錄的基本緩存統(tǒng)計(jì)數(shù)據(jù)可在jmx.current."rubix:catalog=<catalog_name>,name=stats "表中找到。jmx.current."rubix:catalog=<catalog_name>,type=detailed,name=stats"表包含更詳細(xì)的統(tǒng)計(jì)數(shù)據(jù)。

下面的示例查詢返回Hive目錄的平均緩存命中率:

SELECT avg(cache_hit)
FROM jmx.current. "rubix:catalog=hive,name=stats"
WHERE NOT is_nan(cache_hit);

限制

緩存不支持用戶模擬,不能與Kerberos保護(hù)的HDFS一起使用。它不考慮任何特定于用戶的對(duì)象存儲(chǔ)訪問權(quán)限。緩存的對(duì)象對(duì)于緩存系統(tǒng)來說只是透明的二進(jìn)制blob,并且可以完全訪問所有內(nèi)容。

表的重定向

Trino提供了一種可能性,即根據(jù)表的格式和目錄配置,將對(duì)現(xiàn)有表的操作透明地重定向到適當(dāng)?shù)哪夸洝?/p>

在依賴元存儲(chǔ)服務(wù)的連接器的背景下(例如,Hive連接器、Iceberg連接器和Delta Lake連接器),元存儲(chǔ)(Hive元存儲(chǔ)服務(wù)、AWS Glue數(shù)據(jù)目錄)可以用來習(xí)慣不同的表格式。因此,一個(gè)元存儲(chǔ)數(shù)據(jù)庫可以容納各種不同格式的表。

作為一個(gè)具體的例子,讓我們使用下面這個(gè)簡(jiǎn)單的場(chǎng)景,它利用了表的重定向:

USE example.example_schema;

EXPLAIN SELECT * FROM example_table;
                               Query Plan
-------------------------------------------------------------------------
Fragment 0 [SOURCE]
     ...
     Output[columnNames = [...]]...
     └─ TableScan[table = another_catalog:example_schema:example_table]
            ...

EXPLAIN語句的輸出指出了處理表example_table的SELECT查詢的實(shí)際目錄。

當(dāng)使用全路徑表名時(shí),表的重定向功能也能發(fā)揮作用:

EXPLAIN SELECT * FROM example.example_schema.example_table;
                               Query Plan
-------------------------------------------------------------------------
Fragment 0 [SOURCE]
     ...
     Output[columnNames = [...]]...
     └─ TableScan[table = another_catalog:example_schema:example_table]
            ...

Trino為以下操作提供表的重定向支持:

  • Table read operations
    • SELECT
    • DESCRIBE
    • SHOW STATS
    • SHOW CREATE TABLE
  • Table write operations
    • INSERT
    • UPDATE
    • MERGE
    • DELETE
  • Table management operations
    • ALTER TABLE
    • DROP TABLE
    • COMMENT

Trino不提供視圖重定向支持。

該連接器支持從Hive表重定向到Iceberg和Delta Lake表,目錄配置屬性如下:

  • hive.iceberg-catalog-name用于將查詢重定向至Iceberg連接器

  • hive.delta-lake-catalog-name用于重定向查詢到Delta Lake連接器。

性能調(diào)優(yōu)配置屬性

下表描述了Hive連接器的性能調(diào)優(yōu)屬性。

性能調(diào)整配置屬性被認(rèn)為是專家級(jí)的功能。改變這些屬性的默認(rèn)值可能會(huì)導(dǎo)致不穩(wěn)定和性能下降。

Property name Description Default value
hive.max-outstanding-splits 在調(diào)度器嘗試暫停之前,查詢中每個(gè)表掃描的緩沖分割的目標(biāo)數(shù)量。 1000
hive.max-outstanding-splits-size 在查詢失敗之前,查詢中每個(gè)表掃描的緩沖分割所允許的最大尺寸。 256 MB
hive.max-splits-per-second 每秒鐘每張表掃描產(chǎn)生的最大分片數(shù)。這可以用來減少存儲(chǔ)系統(tǒng)的負(fù)載。默認(rèn)情況下,沒有限制,這將導(dǎo)致Trino最大限度地實(shí)現(xiàn)數(shù)據(jù)訪問的并行化。
hive.max-initial-splits 對(duì)于每個(gè)表的掃描,協(xié)調(diào)器首先分配最多為max-initial-split-size的文件部分。在 max-initial-splits被分配后,max-split-size 被用于剩余的分片。 200
hive.max-initial-split-size max-initial-splits分配完畢之前,分配給工作者的單個(gè)文件段的大小。較小的分割導(dǎo)致更多的并行性,這對(duì)較小的查詢有促進(jìn)作用。 32 MB
hive.max-split-size 分配給工作者的單個(gè)文件部分的最大尺寸。較小的分割導(dǎo)致更多的并行性,因此可以減少延遲,但也有更多的開銷,增加系統(tǒng)的負(fù)載。

File formats

Hive連接器支持以下文件類型和格式:

  • ORC
  • Parquet
  • Avro
  • RCText (RCFile using ColumnarSerDe)
  • RCBinary (RCFile using LazyBinaryColumnarSerDe)
  • SequenceFile
  • JSON (using org.apache.hive.hcatalog.data.JsonSerDe)
  • CSV (using org.apache.hadoop.hive.serde2.OpenCSVSerde)
  • TextFile

ORC format configuration properties

以下屬性用于配置由Hive連接器執(zhí)行的對(duì)ORC文件的讀和寫操作。

Property Name Description Default
hive.orc.time-zone 為沒有聲明時(shí)區(qū)的傳統(tǒng)ORC文件設(shè)置默認(rèn)時(shí)區(qū)。 JVM default
hive.orc.use-column-names 通過名稱訪問ORC列。默認(rèn)情況下,ORC文件中的列是通過它們?cè)贖ive表定義中的序號(hào)位置來訪問的。相等的目錄會(huì)話屬性是orc_use_column_names false
hive.orc.bloom-filters.enabled 啟用用于謂詞下推的Bloom過濾器。 false

Parquet format configuration properties

以下屬性用于配置由Hive連接器執(zhí)行的對(duì)Parquet文件的讀寫操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-466148.html

Property Name Description Default
hive.parquet.time-zone 將時(shí)間戳值調(diào)整到一個(gè)特定的時(shí)區(qū)。對(duì)于Hive 3.1+,將其設(shè)置為UTC。 JVM default
hive.parquet.use-column-names 默認(rèn)情況下,通過名稱訪問Parquet列。將此屬性設(shè)置為false,以按Hive表定義中的順序位置訪問列。相等的目錄會(huì)話屬性是parquet_use_column_names。 true
parquet.optimized-reader.enabled 讀取Parquet文件時(shí),是否使用分批讀列器以提高性能。將此屬性設(shè)置為false以默認(rèn)禁用優(yōu)化的parquet閱讀器。相等的目錄會(huì)話屬性是parquet_optimized_reader_enabled true
parquet.optimized-writer.enabled 寫入Parquet文件時(shí)是否使用優(yōu)化的寫入器。將此屬性設(shè)置為false以默認(rèn)禁用優(yōu)化的Parquet寫入器。相等的目錄會(huì)話屬性是parquet_optimized_writer_enabled。 true
parquet.optimized-writer.validation-percentage 當(dāng)parquet.optimized-writer.enabled設(shè)置為true時(shí),通過重讀整個(gè)文件來驗(yàn)證寫入后的parquet文件的百分比。相等的目錄會(huì)話屬性是parquet_optimized_writer_validation_percentage。可以通過設(shè)置該屬性為 0來關(guān)閉驗(yàn)證功能。 5
parquet.writer.page-size Parquet寫入器的最大頁面尺寸。 1 MB
parquet.writer.block-size Parquet寫入器的最大行組大小。 128 MB
parquet.writer.batch-size 在一個(gè)批次中,parquet寫入器所處理的最大行數(shù)。 10000
parquet.use-bloom-filter 讀取Parquet文件時(shí),是否使用bloom過濾器來推倒謂詞。將此屬性設(shè)置為 false,默認(rèn)情況下禁止使用bloom過濾器。相等的目錄會(huì)話屬性是parquet_use_bloom_filter true
parquet.max-read-block-row-count 設(shè)置一個(gè)批次中讀取的最大行數(shù)。 8192
parquet.optimized-nested-reader.enabled 當(dāng)從Parquet文件中讀取ARRAY、MAP和ROW類型時(shí),是否應(yīng)該使用分批列讀器以提高性能。將此屬性設(shè)置為false以默認(rèn)禁用結(jié)構(gòu)數(shù)據(jù)類型的優(yōu)化parquet閱讀器。相等的目錄會(huì)話屬性是parquet_optimized_nested_reader_enabled。 true

與Hive 3有關(guān)的限制

  • 由于安全原因,sys系統(tǒng)目錄無法訪問。
  • 不支持Hive的 timestamp with local zone數(shù)據(jù)類型??梢詮木哂羞@種類型的列的表中讀出,但不能訪問該列數(shù)據(jù)。不支持向這樣的表寫入。
  • 由于Hive問題HIVE-21002和HIVE-22167,Trino不能正確讀取由Hive 3.1或更高版本創(chuàng)建的Parquet、RCBinary或Avro文件格式中的時(shí)間戳值。當(dāng)從這些文件格式讀取時(shí),Trino返回的結(jié)果與Hive不同。
  • Trino不支持為Hive事務(wù)表收集表的統(tǒng)計(jì)數(shù)據(jù)。你必須在創(chuàng)建表后使用Hive的ANALYZE語句來收集表的統(tǒng)計(jì)數(shù)據(jù)。

到了這里,關(guān)于【Trino實(shí)戰(zhàn)】Hive connector功能性文檔的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 2

    【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 2

    (基于UE5 的Python支持插件) 支持Python語言基于UE5進(jìn)行開發(fā) GIT地址:https://github.com/mamoniem/UnrealEditorPythonScripts (基于UE5 的Haxe支持插件) Haxe是一門新興的開源編程語言,是一種開源的編程語言。支持Haxe語言基于UE5進(jìn)行開發(fā)。 GIT地址:https://github.com/RobertBorghese/Haxe-UnrealEngine

    2024年02月06日
    瀏覽(174)
  • 【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 1

    【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 1

    實(shí)現(xiàn)POST/GET基本方法,并支持HEAD帶信息。 使用案例:【虛幻引擎UE】UE5 三種模式調(diào)用API詳解(案例基于免費(fèi)Varest插件) 能夠快速實(shí)現(xiàn)打開對(duì)話框獲取數(shù)據(jù)的導(dǎo)入、導(dǎo)出路徑。 某月限免插件,比較方便的地圖插件,可以改改樣式直接用。 http下載數(shù)據(jù)到指定路徑 按空格可以切

    2023年04月11日
    瀏覽(104)
  • 在辦公室會(huì)客室隔斷中,如何平衡功能性、美觀性和經(jīng)濟(jì)性

    在辦公室會(huì)客室隔斷的設(shè)計(jì)中,平衡功能性、美觀性和經(jīng)濟(jì)性是非常重要的。以下是一些建議: 1. 功能性: - 考慮隔斷的功能需求,例如提供私密性、減少噪音、分隔空間等。選擇適當(dāng)?shù)母魯嗖牧虾徒Y(jié)構(gòu),以滿足這些功能要求。 - 考慮到隔斷的靈活性和可調(diào)性,以便根據(jù)需要

    2024年02月15日
    瀏覽(30)
  • 4-Arm PEG-Aldehyde可以用作生物材料的修飾劑,通過引入醛基官能團(tuán),賦予材料良好的反應(yīng)性和功能性

    4-Arm PEG-Aldehyde可以用作生物材料的修飾劑,通過引入醛基官能團(tuán),賦予材料良好的反應(yīng)性和功能性

    物理參數(shù): 英文名稱:4-arm-PEG-Ald,4-Arm PEG-Aldehyde 中文名稱:4-臂聚乙二醇丙醛 分子量:1k,2k,3.4k,5k,10k,20k(可按需定制) 性狀:固體或液體(根據(jù)分子量決定) 規(guī)格標(biāo)準(zhǔn):1g,5g,10g,可提供mg級(jí)以及kg級(jí)的產(chǎn)品開發(fā)服務(wù) 儲(chǔ)存條件:-20℃,干燥,避免頻繁解凍和冷凍

    2024年04月15日
    瀏覽(20)
  • 【Trino實(shí)戰(zhàn)】Elasticsearch Connector輔助說明

    對(duì)ES的版本要求:(Elasticsearch 6.6.0 or later) or OpenSearch (1.1.0 or later) 。 常規(guī)配置 Property name Description Default elasticsearch.host 以逗號(hào)分隔的Elasticsearch節(jié)點(diǎn)連接的主機(jī)名稱列表。這個(gè)屬性是必需的。 elasticsearch.port 要連接的Elasticsearch節(jié)點(diǎn)的端口。 9200 elasticsearch.default-schema-name 包含所有

    2024年02月07日
    瀏覽(18)
  • hive實(shí)戰(zhàn)使用文檔(一)之hive on hbase知多少

    查看數(shù)據(jù)庫 : 切換數(shù)據(jù)庫: 查看所有的表: 查詢表結(jié)構(gòu): 創(chuàng)建數(shù)據(jù)庫: 刪除數(shù)據(jù)庫 創(chuàng)建表 刪除表 創(chuàng)建視圖 創(chuàng)建外部表 建表語句標(biāo)準(zhǔn)化 查看 show create table student 方式一:hive內(nèi)部映射hbase 建表方式兩種(已測(cè)): 1、創(chuàng)建內(nèi)部表 創(chuàng)建時(shí),指定hbase表名不能在hbase中提前創(chuàng)建,或已

    2024年02月11日
    瀏覽(28)
  • Flink SQL Hive Connector使用場(chǎng)景

    目錄 1.介紹 2.使用 2.1注冊(cè)HiveCatalog 2.2Hive Read 2.2.1流讀關(guān)鍵配置 2.2.2示例

    2024年02月06日
    瀏覽(24)
  • JDBC Vertica Source Connector 使用文檔

    JDBC Vertica Source Connector 使用文檔

    Spark Flink SeaTunnel Zeta 批處理 精確一次性處理 列投影 并行處理 支持用戶自定義拆分 支持查詢 SQL 并實(shí)現(xiàn)投影效果 通過 JDBC 讀取外部數(shù)據(jù)源數(shù)據(jù)。 Datasource Supported versions Driver Url Maven Vertica Different dependency version has different driver class. com.vertica.jdbc.Driver jdbc:vertica://localhost:5433/ve

    2024年02月12日
    瀏覽(14)
  • 【創(chuàng)新項(xiàng)目探索】大數(shù)據(jù)服務(wù)omnidata-hive-connector介紹

    【創(chuàng)新項(xiàng)目探索】大數(shù)據(jù)服務(wù)omnidata-hive-connector介紹

    omnidata-hive-connector介紹 omnidata-hive-connector是一種將大數(shù)據(jù)組件Hive的算子下推到存儲(chǔ)節(jié)點(diǎn)上的服務(wù),從而實(shí)現(xiàn)近數(shù)據(jù)計(jì)算,減少網(wǎng)絡(luò)帶寬,提升Hive的查詢性能。目前支持Hive on Tez。 omnidata-hive-connector已在openEuler社區(qū)開源。 OmniData架構(gòu) OmniData是算子下推的總稱。OmniData主要由以下

    2024年02月09日
    瀏覽(18)
  • 實(shí)戰(zhàn)講解|Trino 在袋鼠云數(shù)棧的探索與實(shí)踐

    實(shí)戰(zhàn)講解|Trino 在袋鼠云數(shù)棧的探索與實(shí)踐

    當(dāng)前隨著企業(yè)內(nèi)外部數(shù)據(jù)源的不斷擴(kuò)展和積累,數(shù)據(jù)呈現(xiàn)出大規(guī)模、多樣化、質(zhì)量參差不齊等顯著特征。如何有效激活這些結(jié)構(gòu)復(fù)雜且類型多樣的數(shù)據(jù)資產(chǎn),挖掘其深層價(jià)值,已成為眾多企業(yè)亟待解決的實(shí)際挑戰(zhàn)。 袋鼠云數(shù)棧作為新一代一站式大數(shù)據(jù)基礎(chǔ)軟件,其核心優(yōu)勢(shì)在

    2024年01月19日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包