Bu konuda, bir Hologres harici tablosunun nasıl oluşturulacağı anlatılmaktadır. Konuda; bir Hologres veri kaynağının nasıl belirtileceği, RAM rolü veya hizmet bağlantılı rol aracılığıyla erişimin nasıl verileceği, hedef tablonun nasıl eşleneceği ve CREATE TABLE ifadesinde JDBC sürücü ayarlarının nasıl yapılandırılacağı açıklanmaktadır.
Genel Bakış
Hologres; PostgreSQL protokolü ile uyumlu olan ve MaxCompute ile sorunsuz şekilde entegre edilen gerçek zamanlı etkileşimli analitik bir veri ambarıdır. MaxCompute içinde Hologres harici tabloları oluşturarak PostgreSQL JDBC sürücüsü ve Hologres RAM rolü kimlik doğrulaması yardımıyla bir Hologres veri kaynağını sorgulayabilirsiniz. Bu yöntem yedekli depolamayı ortadan kaldırır, veri içe veya dışa aktarmaya gerek kalmaz ve hızlı sorgu sonuçları sunar.
Sınırlamalar
-
Veri işleme (DML)
MaxCompute, Hologres harici tablolar üzerinde
UPDATEveyaDELETEişlemlerini desteklemez.-
Hologres harici tablolar
INSERT OVERWRITEifadesini desteklemez.Bir Hologres tablosundaki verileri MaxCompute verileriyle üzerine yazmak için Hologres'te bir
INSERT OVERWRITEifadesi çalıştırın. Bu ifade, bir MaxCompute tablosuyla eşlenen Hologres'teki bir harici tablodan veri okur. Daha fazla bilgi için bkz. INSERT OVERWRITE.
-
Veri yazma riski
Bir Hologres harici tabloya büyük hacimli veri yazdığınızda paralel yazma işlemleri kullanılır. Nadir durumlarda bu işlemlerden biri veriyi yeniden yazabilir ve bu durum veri çoğalmasına neden olabilir.
-
Bölümler
Hologres ve MaxCompute'deki bölümlenmiş tablolar birbirleriyle doğrudan eşleşmez. Hologres harici tablolar bölümleri desteklemez. Ancak doğrudan okuma modunda, bir Hologres bölümlenmiş üst tablosuyla eşlenen bir Hologres harici tablosunu sorguladığınızda ve sorgu filtresi altta yatan bölümlenmiş alt tablonun bölüm sütununa ilişkin bir koşul içeriyorsa bölüm ayıklama uygulanır.
Hologres harici tablolar
clusterniteliğini desteklemez.Hologres harici tablolar bir Hologres Dinamik Tablo ile eşlemeyi desteklemez.
Desteklenen veri türleri listesine bakın.
Hologres harici tablo oluşturma
Bir Hologres harici tablosunu Hologres için RAM rolü yetkilendirmesi veya hizmet bağlantılı rol yetkilendirme modu kullanarak oluşturabilirsiniz.
Dikkat Edilecek Hususlar
Harici tablo oluşturma yönergeleri
-
Hologres örneğiniz dış erişim için bir IP izin listesi kullanıyorsa bunu desteklenen bir sürüme yükseltin:
RAM rolü yetkilendirme modu için Hologres V3.2 veya sonraki bir sürüme yükseltin.
Hizmet bağlantılı rol yetkilendirme modu için Hologres V2.0.28 veya sonraki bir sürüme yükseltin.
Yükseltmeden sonra Hologres, MaxCompute hizmet kimliğine veya hizmet bağlantılı role dayalı olarak MaxCompute düğüm IP'lerine otomatik olarak güvenir. Artık MaxCompute esnek düğüm IP adreslerini Hologres örneğinizin IP izin listesine eklemeniz gerekmez.
Hologres'teki hem üst hem de alt tabloları bir harici tabloyla eşleyebilirsiniz. Ancak bir üst tabloyla eşlenen bir harici tabloya yalnızca okuma yapabilir, yazma işlemi gerçekleştiremezsiniz.
Bir Hologres harici tabloya veri yazarken INSERT ON CONFLICT (UPSERT) mekanizması desteklenmez. Hologres kaynak tablosunda bir birincil anahtar varsa birincil anahtar çakışmalarına neden olan veri yazmaktan kaçının.
Tablo adları ve sütun adları büyük/küçük harfe duyarlı değildir. Tabloları ve sütunları oluştururken veya sorgularken büyük/küçük harf duyarlılığını zorlayamazsınız.
Şema uyumluluğu
Hologres kaynak tablo şeması harici tablo şemasıyla eşleşmiyorsa aşağıdaki hususlara dikkat edin:
Eşleşmeyen sütun sayısı: Kaynak tabloda harici tablodan daha az sütun varsa veri okuma işlemi
column "xxx" does not existgibi bir hata ile başarısız olur. Kaynak tabloda harici tablodan daha fazla sütun varsa ek sütunlar yoksayılır.Eşleşmeyen sütun türleri: MaxCompute, bir Hologres kaynak tablosundan gelen
STRINGsütununu harici tablodaki birINTsütunuyla eşleyemez. BirINTsütununun birSTRINGsütunuyla eşlenmesi desteklenir ancak önerilmez.
Sözdizimi
Bir harici tablo oluştururken CREATE TABLE DDL ifadesinde StorageHandler'ı belirtin, RAM rolü yetkilendirmesini veya hizmet bağlantılı rol yetkilendirmesini yapılandırın ve Hologres veri kaynağına erişmek için JDBC bağlantı URL'sini sağlayın.
RAM rolü modu
Tam kod örneği için bkz. Hologres harici tablo oluşturma (RAM rolü yetkilendirme modu).
CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
......
)
stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='<role_arn>')
location 'jdbc:postgresql://<endpoint>:<port>/<database>?
ApplicationName=MaxCompute&[currentSchema=<schema>&]
[useSSL={true|false}&]table=<holo_table_name>/'
tblproperties (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
-- When Hologres and MaxCompute column names differ, add the odps.federation.jdbc.colmapping parameter to map columns.
-- This parameter can be omitted if column names are identical.
['odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>,
<table_column2>:<source_column2>,...']
);
Hizmet bağlantılı rol modu
Tam kod örneği için bkz. Hologres harici tablo oluşturma (hizmet bağlantılı rol yetkilendirme modu).
Hizmet bağlantılı rol yetkilendirme modu, aynı RAM kullanıcısının manuel yetkilendirme gerektirmeden hem MaxCompute hem de Hologres'teki yetkili tablolara erişmesine olanak tanır. Bu mod ayrıca Hologres IP izin listesi özelliğini de destekler.
-- Create an external table
CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
......
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
LOCATION 'jdbc:postgresql://<endpoint>:<port>/<database>?
ApplicationName=MaxCompute&[currentSchema=<schema>&]
[useSSL={true|false}&]table=<holo_table_name>/'
tblproperties (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
-- When Hologres and MaxCompute column names differ, add the odps.federation.jdbc.colmapping parameter to map columns.
-- This parameter can be omitted if column names are identical.
['odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>,
<table_column2>:<source_column2>,...']
);
Parametreler
Örnekler
Adım 1: Hologres verilerini hazırlama
Bir Hologres veritabanınız, tablonuz ve test veriniz varsa bu adımı atlayabilirsiniz.
Hologres veritabanı oluşturma
Hologres yönetim konsolu üzerinde oturum açın. Sol üst köşeden bir bölge seçin.
Soldaki gezinme bölmesinde Instances seçeneğine tıklayın.
-
Bir örneğiniz yoksa önce bir Hologres örneği satın almanız gerekir.
Instances sayfasında hedef örneğin adına tıklayın.
Örnek ayrıntıları sayfasında Connect to Instance seçeneğine tıklayın.
-
Metadata Management sekmesine tıklayın.
Create Database seçeneğine tıklayın, görünen iletişim kutusunda Database Name değerini girin ve diğer parametreleri varsayılan ayarlarında bırakın.
Hologres tablosu oluşturma
Örnek ayrıntıları sayfasında Connect to Instance seçeneğine tıklayın.
SQL Editor sekmesine tıklayın.
-
Bir tablo oluşturmak ve veri eklemek için aşağıdaki ifadeleri çalıştırın:
CREATE TABLE IF NOT EXISTS holo ( id INT PRIMARY KEY, name TEXT ); INSERT INTO holo (id, name) VALUES (1, 'kate'), (2, 'mary'), (3, 'bob'), (4, 'tom'), (5, 'lulu'), (6, 'mark'), (7, 'haward'), (8, 'lilei'), (9, 'hanmeimei'), (10, 'lily'), (11, 'lucy'); SELECT * FROM holo ORDER BY id;
Adım 2: Hologres harici tablo oluşturma
RAM rolü
Bu modda harici tablonun oluşturucusu Hologres veri erişim izinlerine sahip bir RAM rolünü harici tablo tanımına yerleştirir. Diğer MaxCompute kullanıcılarına daha sonra bu harici tablo üzerinde izin verilebilir. Bir kullanıcı harici tabloya eriştiğinde sistem verileri eşlenen Hologres tablosundan almak için bağlı RAM rolünü kullanır.
Hologres, bir veritabanı örneğine hesaplar arası bir RAM rolü eklemeyi desteklemez. Bu nedenle RAM rolü modundaki Hologres yalnızca aynı hesaptaki RAM rollerini destekler. Benzer şekilde MaxCompute bir harici tablo veya harici şema kullanarak Hologres'e erişirken yalnızca aynı hesaptaki RAM rolleri desteklenir.
Ön Koşullar
-
Hologres harici tablosunu oluşturmak istediğiniz hedef bir MaxCompute projeniz vardır.
Daha fazla bilgi için bkz. MaxCompute projesi oluşturma.
Bir RAM rolü oluşturdunuz ve yetkilendirdiniz. Daha fazla bilgi için bkz. Hologres için RAM Rolü Yetkilendirme.
MaxCompute'de harici tablo oluşturma
MaxCompute istemcisinde oturum açın ve hedef MaxCompute projenize geçiş yapın.
-
Hologres harici tablosunu oluşturmak için aşağıdaki ifadeyi çalıştırın.
Aşağıdaki örnekte Adım 1: Hologres verilerini hazırlama bölümünde hazırlanan veriler kullanılmıştır:
Hologres veritabanı adı:
holo_external_test.Hologres veritabanı şeması:
public.Hologres tablo adı:
holo.Hologres klasik ağ uç noktası:
hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80.
CREATE EXTERNAL TABLE IF NOT EXISTS my_table_holo_jdbc ( user_id bigint, user_name string ) stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::139699392458****:role/<role name>') location 'jdbc:postgresql://hgprecn-cn-oew210ut****-cn-<region>-internal.hologres.aliyuncs.com:80 /<holo database name>?ApplicationName=MaxCompute ¤tSchema=public&table=<table name>/' tblproperties ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo', -- When the column names of the Hologres source table differ from those of the Hologres external table, -- add the odps.federation.jdbc.colmapping parameter for column mapping. -- This parameter can be omitted when the column names are identical. 'odps.federation.jdbc.colmapping'='user_id:id,user_name:name' ); -
Yeni oluşturulan harici tabloyu kullanarak Hologres kaynak tablosunu sorgulamak için aşağıdaki komutları çalıştırın.
-- The following properties are required to access Hologres external tables. SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; SET odps.table.api.enable.holo.table=true; --Enable JDBC direct read access -- Query data from the Hologres external table. SELECT * FROM my_table_holo_jdbc limit 10; -- The command returns the following result. +------------+------------+ | user_id | user_name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 8 | lilei | | 10 | lily | | 1 | kate | | 6 | mark | | 11 | lucy | +------------+------------+ -
Verileri Hologres ile değiştirmek ve birleşik analiz gerçekleştirmek için Hologres harici tablosunu kullanın.
-
Hızlandırılmış analiz ve çevrimiçi hizmetler için MaxCompute'de işlenen verileri harici tablo kullanarak Hologres'e yazın.
-- The following properties are required to access Hologres external tables. SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; SET odps.table.api.enable.holo.table=true; --Enable JDBC direct read access -- Insert data into the Hologres external table. INSERT INTO my_table_holo_jdbc VALUES (12,'alice'); -- Query data from the Hologres external table. SELECT * FROM my_table_holo_jdbc; -- The command returns the following result. +------------+------------+ | user_id | user_name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 12 | alice | | 8 | lilei | | 10 | lily | | 1 | kate | | 11 | lucy | | 6 | mark | | 3 | bob | +------------+------------+ -
Gerçek zamanlı güncellemeleri desteklemek amacıyla sık güncellenen boyut tablolarını Hologres'te saklayın. MaxCompute, boyut tablosuna bir harici tablo kullanarak erişir ve birleşik analiz için MaxCompute'deki bir gerçek tablo ile birleştirir.
-- The following properties are required to access Hologres external tables. SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; -- Create a MaxCompute internal table. CREATE TABLE holo_test AS SELECT * FROM my_table_holo_jdbc; -- Join the MaxCompute internal table with the Hologres external table for analysis. SELECT * FROM my_table_holo_jdbc t1 INNER JOIN holo_test t2 ON t1.id=t2.id; -- The command returns the following result. +------------+------------+------------+------------+ | user_id | user_name |user_id2 | user_name2 | +------------+------------+------------+------------+ | 9 | hanmeimei | 9 | hanmeimei | | 4 | tom | 4 | tom | | 7 | haward | 7 | haward | | 2 | mary | 2 | mary | | 5 | lulu | 5 | lulu | | 12 | alice | 12 | alice | | 8 | lilei | 8 | lilei | | 10 | lily | 10 | lily | | 1 | kate | 1 | kate | | 11 | lucy | 11 | lucy | | 6 | mark | 6 | mark | | 3 | bob | 3 | bob | +------------+------------+------------+------------+
-
Hizmet bağlantılı rol
Bu modda Hologres verilerine erişmek için bir hizmet bağlantılı rol oluşturmanız gerekir. Yetkisiz erişimi önlemek amacıyla bu mod kullanıcının kimliğini kimlik doğrulama için Hologres'e iletir; dolayısıyla kullanıcının hem harici tablo hem de altta yatan Hologres tablosu üzerinde izinlere sahip olması gerekir.
Ön Koşullar
-
Hologres harici tablosunu oluşturmak istediğiniz hedef bir MaxCompute projeniz vardır.
Daha fazla bilgi için bkz. MaxCompute projesi oluşturma.
Hologres'te MaxCompute hesabınızla aynı ada sahip bir hesap bulunur ve bu hesabın hedef tablo üzerinde okuma ve yazma izinleri vardır.
Bu hizmet bağlantılı rol yetkilendirme modu yalnızca Hologres V1.3 ve sonraki sürümlerde desteklenir. Şu anda bu mod yalnızca Hologres harici tablolarından okumayı destekler, yazmayı desteklemez.
MaxCompute'de harici tablo oluşturma
MaxCompute istemcisinde oturum açın ve hedef MaxCompute projenize geçiş yapın.
-
Hologres harici tablosunu oluşturmak için aşağıdaki ifadeyi çalıştırın.
Aşağıdaki örnekte Adım 1: Hologres verilerini hazırlama bölümünde hazırlanan veriler kullanılmıştır:
Hologres veritabanı adı:
holo_external_test.Hologres veritabanı şeması:
public.Hologres tablo adı:
holo.Hologres klasik ağ uç noktası:
hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80.
CREATE EXTERNAL TABLE IF NOT EXISTS holo_mc_external_dbl ( user_id int, user_name string ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' location 'jdbc:postgresql://hgpostcn-cn-****-cn-<region>-internal.hologres.aliyuncs.com:80 /<holo database name>?ApplicationName=MaxCompute ¤tSchema=public&table=<table name>/' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo', -- When the column names of the Hologres source table differ from those of the Hologres external table, -- add the odps.federation.jdbc.colmapping parameter for column mapping. -- This parameter can be omitted when the column names are identical. 'odps.federation.jdbc.colmapping'='user_id:id,user_name:name' ); -
Harici tabloyu sorgulayın.
SELECT * FROM holo_mc_external_dbl; -- The command returns the following result. +------------+------------+ | user_id | user_name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 12 | alice | | 8 | lilei | | 10 | lily | | 1 | kate | | 11 | lucy | | 6 | mark | | 3 | bob | +------------+------------+
Hologres harici tablolar için doğrudan okumayı etkinleştirin
Varsayılan olarak MaxCompute, Hologres harici tablolardan verileri bir JDBC bağlantısı üzerinden okur. Performansı artırmak amacıyla doğrudan okuma modunu etkinleştirebilirsiniz; bu mod, MaxCompute'un Hologres depolama katmanına doğrudan erişmesini sağlar. Bu modun sağladığı avantajlar şunlardır:
Tablo okuma kararlılığı.
Okuma gecikme süresini önemli ölçüde azaltır ve veri sorgularını hızlandırır.
Yüklem itelemesi ile uyumludur; sorgu filtreleme koşullarını Hologres tarafına iter, taranan veri miktarını azaltır ve maliyetleri düşürür.
Hologres FE'ye yapılan bağlantı sayısını büyük ölçüde azaltarak Hologres örneğindeki performans yükünü en aza indirir; çoğu sorgu yalnızca tek bir bağlantı gerektirir.
Sınırlamalar
Hologres için doğrudan okuma modunu etkinleştirdiğinizde aşağıdaki sınırlamalar geçerlidir. Bu koşullar karşılanmadığında sorgu JDBC moduna geri döner.
-
Sürüm gereksinimleri
Hologres örneğinizin V1.3.34 veya üzeri bir sürümde olması gerekir. Doğrudan okuma özelliği önceki sürümlerde desteklenmez.
-
Tablo türü kısıtlamaları
Doğrudan okuma modu, Hologres soğuk depolama tabloları için desteklenmez.
Doğrudan okuma modu, Hologres satır yönelimli tabloları için desteklenmez.
-
Veri türü eşleme sınırlamaları
Doğrudan okuma modunu kullanırken, Hologres'teki Timestamp With Time Zone türünün MaxCompute'ta TIMESTAMP türüne eşlenmesi küçük zaman tutarsızlıklarına neden olabilir. Farklılıklar şu şekildedir:
-
Zaman değeri tutarsızlığı
1900-12-31 15:54:15tarihinden önceki zaman damgaları için MaxCompute tarafından döndürülen saat 5 dakika 44 saniye ileridedir.1900-12-31 15:54:16ile1969-12-31 23:59:58arasındaki zaman damgaları için MaxCompute tarafından döndürülen saat 1 saniye ileridedir.1969-12-31 23:59:59tarihinden sonraki zaman damgaları için Hologres ve MaxCompute'taki saatler aynıdır.
-
Saat dilimi ofseti
Örneğin, MaxCompute saat dilimi UTC+8 ise ve Hologres'teki Timestamp With Time Zone sütunu
2000-01-01 00:00:00değerine sahipse, MaxCompute2000-01-01 08:00:00değerini döndürür.Örneğin, MaxCompute saat dilimi UTC+8 ise ve Hologres'teki Timestamp With Time Zone sütunu
1969-01-01 00:00:00değerine sahipse, MaxCompute1969-01-01 08:00:01değerini döndürür.
-
-
Aynı bölge kısıtlaması
Ağ bağlantısı kısıtlamaları nedeniyle MaxCompute yalnızca aynı bölgedeki Hologres örneklerine erişebilir. Bölgeler arası erişim aşağıdaki hatayla başarısız olur:
FAILED: ODPS-0010000:System internal error - fuxi job failed, caused by: Pangu request failed with error code 3. Hologres örneğiniz birincil/ikincil mimari kullanıyorsa, bağlantı URL'sinde yalnızca birincil örneği belirtebilirsiniz; ikincil örnek belirtilemez.
Foreign Server modu için ek sınırlama: MaxCompute projesi için şema düzeyindeki sözdizimi anahtarını etkinleştirmeniz gerekir.
Doğrudan okuma modunu etkinleştirin
Oturumunuz için doğrudan okuma modunu etkinleştirmek üzere MaxCompute'ta SQL sorgunuzdan önce aşağıdaki komutu ekleyin:
SET odps.table.api.enable.holo.table=true;
Doğrudan okuma modunu proje düzeyinde de etkinleştirebilir veya devre dışı bırakabilirsiniz.
-- You can enable direct read and disable JDBC fallback at the project level.
-- Enable direct read at the project level:
setproject odps.table.api.enable.holo.table=true; -- Set to true to enable, false to disable.
-- Disable the default fallback to JDBC:
setproject odps.table.api.allow.fallback.jdbc=false; -- Set to true to allow fallback, false to prevent it.
Doğrudan okuma modunu doğrulayın
Bir sorgunun doğrudan okuma modunu kullandığını doğrulamak için Logview günlüklerini kontrol edin. Logview kullanımına ilişkin daha fazla bilgi için bkz. Logview 2.0 kullanarak iş çalıştırma bilgilerini görüntüleme.
Logview'deki Summary sekmesinde external holo tables alanını bulun. Format aşağıdaki gibidir:
<project_name>.<table_name>:<access mode>[<(fallback reason)>]
Parametreler:
Parametre | Açıklama |
project_name | Projenin adı. |
table_name | Tablonun adı. |
access mode | Harici tablo için erişim modu. Geçerli değerler:
|
Doğrudan okuma modunu kullanan bir iş bir sınırlamayla karşılaştığında otomatik olarak JDBC moduna geri döner. Yoğun iş yükleri altında bu geri dönüş, Hologres bağlantı havuzundan önemli kaynaklar tüketebilir ve JDBC modundaki veri aktarımı, doğrudan okuma moduna kıyasla çok daha verimsizdir. Sonuç olarak, bu kaynaklar yavaş serbest bırakılabilir ve Hologres örneğinizdeki yük artabilir.
Aşırı durumlarda, sık发生的 geri dönüşler aynı Hologres örneğine bağlı diğer iş açısından kritik hizmetleri etkileyebilir. Bunu önlemek için işlerinize set odps.table.api.allow.fallback.jdbc=false; parametresini ekleyerek otomatik geri dönüş mekanizmasını devre dışı bırakabilirsiniz. Bu işlem, işlerin sessizce geri dönmesi yerine başarısız olmasına neden olarak beklenmeyen performans düşüşlerini engeller.
Hologres harici tablolar için yüklem itelemesi
Hologres harici tablolara erişirken MaxCompute, sorgu filtreleme koşullarını yürütme için Hologres'e iletebilir (yüklem itelemesi). Veriler Hologres tarafında önceden filtrelendiğinden veri aktarımı azalır ve sorgu performansı artar. Aşağıdaki senaryolar desteklenir:
Hologres Anlık Görüntüsü Yüklem İtelemesi: Filtre ifadesi bir SQL WHERE yan tümcesine dönüştürülür ve
holo_create_table_snapshot()işlevinin filter parametresi aracılığıyla Hologres sunucusuna iletilir.Hologres JDBC Yüklem İtelemesi: WHERE koşulu JDBC SQL ifadesine eklenir ve Hologres verileri SQL katmanında filtreler.
ORC satır grubu sütun düzeyinde filtreleme: MaxCompute tarafında dosya düzeyinde filtreleme. Her ORC dosyası için bir SearchArgument oluşturulur ve ORC okuyucuya iletilir; okuyucu, sütun istatistiklerini (min/max/count) kullanarak eşleşmeyen satır gruplarını atlar.
Aşağıdaki senaryolar gelecekte desteklenecektir:
Bölüm elemesi: Hologres fiziksel bölümlenmiş tablolar için filtre ifadesi, anlık görüntü oluşturulmadan önce her bölüm değerine göre değerlendirilir. Eşleşmeyen bölümler atlanır ve bunlar için anlık görüntü oluşturulmaz.
Segment anahtarı filtreleme: Anlık görüntü Hologres'ten döndürüldükten sonra MaxCompute, her dosyanın meta verilerindeki min/max segment anahtarını ayrıştırır ve aralığı filtre ifadesiyle karşılaştırır. Bir dosyanın segment anahtarı aralığı filtreyle hiç örtüşmüyorsa dosya atlanır.
Dağıtım kimliği filtreleme: Yalnızca Liquid Tables için desteklenir. Her dosya birden fazla dağıtım kimliğine sahip satırlar içerebilir. Bir RecordBatch okunduktan sonra satırlar dağıtım kimliği aralığına göre filtrelenir.
Kullanım
Senaryo 1: Hologres Snatshot PPD
Hologres doğrudan okuma senaryolarında filtre ifadeleri, mantıksal bölüm tabloları için SQL WHERE yan tümcelerine dönüştürülür ve holo_create_table_snapshot() işlevinin filter parametresi olarak Hologres sunucusuna gönderilir. Bu sayede Hologres, anlık görüntü oluşturma sırasında sunucu tarafında eşleşmeyen dosyaları filtreleyerek MaxCompute'a döndürülen dosya sayısını azaltır ve veri aktarımını minimize eder.
Senaryo | Hologres doğrudan okuma senaryolarında PPD desteği |
Temel parametre |
Örnek sözdizimi:
|
Desteklenen türler | INT、BIGINT、STRING、DATE、TIMESTAMP、BINARY |
Sınırlamalar | Yüklem itelemesi aşağıdakileri desteklemez:
|
Uygulanabilir senaryolar | PPD'yi destekleyen Hologres örnekleri; örnek sürümü aşağıdaki gereksinimlerden birini karşılamalıdır.
|
Senaryo 2: Hologres JDBC PPD
Hologres doğrudan okuma devre dışı bırakıldığında (odps.table.api.enable.holo.table=false), sorgular JDBC yoluyla yürütülür. Bu durumda PPD, Hologres'e gönderilen JDBC SQL ifadesine WHERE yan tümcesini ekleyerek çalışır ve Hologres filtrelemeyi SQL düzeyinde gerçekleştirir. Bu durum, Hologres doğrudan okuma senaryolarındaki PPD'den farklıdır:
Doğrudan okuma PPD: Dosyaları anlık görüntü düzeyinde filtreler
JDBC PPD: Satırları SQL sorgu düzeyinde filtreler
Senaryo | Hologres JDBC okuma senaryolarında PPD desteği |
Temel parametre |
Parametre sözdizimi örneği:
|
Desteklenen türler | INT、BIGINT、DOUBLE、FLOAT、STRING、DATE、TIMESTAMP、TIMESTAMP_NTZ |
Sınırlamalar | Yüklem itelemesi aşağıdakileri desteklemez:
|
Uygulanabilir senaryolar |
|
Senaryo 3: ORC satır grubu sütun düzeyinde filtreleme
MaxCompute tarafında dosya düzeyinde filtreleme. Her ORC dosyası için bir SearchArgument oluşturulur ve ORC okuyucuya iletilir. ORC okuyucu, her stripe/satır grubunun tamamının atlanıp atlanmayacağını belirlemek için sütun istatistiklerini (min/max/count) kullanır.
Dosya düzeyinde eleme MaxCompute tarafında gerçekleştirilir
Hologres tarafında PPD parametresinin etkin olup olmadığına bağlıdır.
Bölümlenmemiş tablolar, fiziksel bölümlenmiş tablolar ve mantıksal bölümlenmiş tabloların tümü desteklenir.
Senaryo | ORC satır grubu sütun düzeyinde filtreleme |
Temel parametre |
|
Desteklenen türler | BOOLEAN、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、STRING、DATE、TIMESTAMP |
Örnekler
Hologres Snapshot PPD
-
Verileri hazırlayın. Hologres örneğinizde bir test tablosu oluşturun ve veri ekleyin.
CREATE TABLE test_multi_type_ppd ( c_id INT NOT NULL, c_boolean BOOLEAN, c_int INT, c_bigint BIGINT, c_double DOUBLE precision, c_float REAL, c_string TEXT, c_date DATE, c_timestamp_tz TIMESTAMPTZ, c_timestamp_ntz TIMESTAMP ) WITH (SEGMENT_KEY = 'c_id'); -- Insert 10 rows of data. INSERT INTO test_multi_type_ppd VALUES (1, true, 10, 1000, 1.25, 1.5, 'alpha', '2023-01-01', '2023-01-01 10:00:00+08', '2023-01-01 02:00:00'), (2, false, 20, 2000, -2.50, 2.5, 'beta', '2023-01-02', '2023-01-02 10:00:00+08', '2023-01-02 02:00:00'), (3, true, 30, 3000, 3.75, -3.5, 'gamma', '2023-01-03', '2023-01-03 10:00:00+08', '2023-01-03 02:00:00'), (4, false, 40, 4000, 4.00, 4.5, 'delta', '2023-01-04', '2023-01-04 10:00:00+08', '2023-01-04 02:00:00'), (5, true, 50, 5000, 5.50, 5.5, 'epsilon', '2023-01-05', '2023-01-05 10:00:00+08', '2023-01-05 02:00:00'), (6, false, 60, 6000, 6.60, 6.0, 'zeta', '2023-01-06', '2023-01-06 10:00:00+08', '2023-01-06 02:00:00'), (7, true, 70, 7000, 7.70, -7.0, 'eta', '2023-01-07', '2023-01-07 10:00:00+08', '2023-01-07 02:00:00'), (8, false, 80, 8000, 8.80, 8.0, 'theta', '2023-01-08', '2023-01-08 10:00:00+08', '2023-01-08 02:00:00'), (9, true, 90, 9000, -9.90, 9.0, 'iota', '2023-01-09', '2023-01-09 10:00:00+08', '2023-01-09 02:00:00'), (10, false, 100, 10000, 10.10, 10.0, 'kappa', '2023-01-10', '2023-01-10 10:00:00+08', '2023-01-10 02:00:00'); SELECT * FROM test_multi_type_ppd; -
MaxCompute'ta bir Hologres harici tablosu oluşturun.
CREATE EXTERNAL TABLE test_multi_type_ppd ( c_id int, c_boolean boolean, c_int int, c_bigint bigint, c_double double, c_float float, c_string string, c_date date, c_timestamp_tz timestamp, c_timestamp_ntz timestamp_ntz ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ('odps.properties.rolearn'='acs:ram::139****:role/<role name>') LOCATION 'jdbc:postgresql://<holo-endpoint>/<db>?currentSchema=public&table=test_multi_type_ppd' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' ); -
Harici tabloyu sorgulayın.
-- Enable Hologres direct read. SET odps.table.api.enable.holo.table=true; -- Set the PPD mode (off, on, or debug). SET odps.external.holo.read.table.rules="{predicate_pushdown_mode:on}"; -- Configure the type system. SET odps.sql.type.system.odps2=true; SET odps.sql.decimal.odps2=true; -- Allow expressions to be pushed down to TableScan. This is typically enabled by default. SET odps.use.builtin.function.input.range=true; -- set odps.mcqa.disable=true; SELECT * FROM test_multi_type_ppd WHERE c_id = 3; -- The query returns the following result. +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | c_id | c_boolean | c_int | c_bigint | c_double | c_float | c_string | c_date | c_timestamp_tz | c_timestamp_ntz | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | 3 | true | 30 | 3000 | 3.75 | -3.5 | gamma | 2023-01-03 | 2023-01-03 10:00:00 | 2023-01-03 02:00:00 | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ -- Check the Summary section in Logview. The following information is displayed: external holo tables: **.default.test_multi_type_ppd:Optimized Holo-side PPD enabled --> Filter pushdown applied successfully Snapshot Id: 56-1-100*** With-filter file count: 2 With-filter create snapshot duration: 19ms
Hologres JDBC PPD
-
Verileri hazırlayın. Hologres örneğinizde bir test tablosu oluşturun ve veri ekleyin.
CREATE TABLE test_multi_type_ppd ( c_id INT NOT NULL, c_boolean BOOLEAN, c_int INT, c_bigint BIGINT, c_double DOUBLE precision, c_float REAL, c_string TEXT, c_date DATE, c_timestamp_tz TIMESTAMPTZ, c_timestamp_ntz TIMESTAMP ) WITH (SEGMENT_KEY = 'c_id'); -- Insert 10 rows of data. INSERT INTO test_multi_type_ppd VALUES (1, true, 10, 1000, 1.25, 1.5, 'alpha', '2023-01-01', '2023-01-01 10:00:00+08', '2023-01-01 02:00:00'), (2, false, 20, 2000, -2.50, 2.5, 'beta', '2023-01-02', '2023-01-02 10:00:00+08', '2023-01-02 02:00:00'), (3, true, 30, 3000, 3.75, -3.5, 'gamma', '2023-01-03', '2023-01-03 10:00:00+08', '2023-01-03 02:00:00'), (4, false, 40, 4000, 4.00, 4.5, 'delta', '2023-01-04', '2023-01-04 10:00:00+08', '2023-01-04 02:00:00'), (5, true, 50, 5000, 5.50, 5.5, 'epsilon', '2023-01-05', '2023-01-05 10:00:00+08', '2023-01-05 02:00:00'), (6, false, 60, 6000, 6.60, 6.0, 'zeta', '2023-01-06', '2023-01-06 10:00:00+08', '2023-01-06 02:00:00'), (7, true, 70, 7000, 7.70, -7.0, 'eta', '2023-01-07', '2023-01-07 10:00:00+08', '2023-01-07 02:00:00'), (8, false, 80, 8000, 8.80, 8.0, 'theta', '2023-01-08', '2023-01-08 10:00:00+08', '2023-01-08 02:00:00'), (9, true, 90, 9000, -9.90, 9.0, 'iota', '2023-01-09', '2023-01-09 10:00:00+08', '2023-01-09 02:00:00'), (10, false, 100, 10000, 10.10, 10.0, 'kappa', '2023-01-10', '2023-01-10 10:00:00+08', '2023-01-10 02:00:00'); SELECT * FROM test_multi_type_ppd; -
MaxCompute'ta bir Hologres harici tablosu oluşturun.
CREATE EXTERNAL TABLE test_multi_type_ppd ( c_id int, c_boolean boolean, c_int int, c_bigint bigint, c_double double, c_float float, c_string string, c_date date, c_timestamp_tz timestamp, c_timestamp_ntz timestamp_ntz ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::122**79014:role/<role name>') LOCATION 'jdbc:postgresql://hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80/<holo database name>?ApplicationName=MaxCompute¤tSchema=public&useSSL=true&table=<table name>/' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' ); -
Harici tabloyu sorgulayın.
-- Disable Hologres direct read and use the JDBC path. SET odps.table.api.enable.holo.table=false; SET odps.table.api.enable.holo.table.auto.fallback=false; -- Enable JDBC PPD. SET odps.external.hive.scan.ppd.enabled=true; -- Allow expressions to be pushed down to TableScan. -- This is enabled by default in most cases. SET odps.use.builtin.function.input.range=true; -- Enable common table. SET odps.sql.common.table.planner.ext.hive.bridge=true; SET odps.sql.common.table.planner.ext.hive.bridge.v2=true; -- After PPD is enabled, TableScan reads only one record. SELECT * FROM test_multi_type_ppd WHERE c_id = 3; -- The query result is as follows: +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | c_id | c_boolean | c_int | c_bigint | c_double | c_float | c_string | c_date | c_timestamp_tz | c_timestamp_ntz | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | 3 | true | 30 | 3000 | 3.75 | -3.5 | gamma | 2023-01-03 | 2023-01-03 10:00:00 | 2023-01-03 02:00:00 | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ -- Check the stdout details of the instance in Logview. The following messages are displayed: [2026-07-22 10:02:41] Volcano instance executor [MainThreadID: 222960] Jdbc HoloRecordReader query conditions: (c_id = 3) JDBC HoloRecordReader: Query predicate pushdown succeeded. JdbcShardRecordReader getSelectQuery: SELECT c_id, c_boolean, c_int, c_bigint, c_double, c_float, c_string, c_date, c_timestamp_tz, c_timestamp_ntz FROM test_multi_type_ppd0721 AS test_multi_type_ppd0721 WHERE ( hg_shard_id = 9) AND ((c_id = 3))
ORC satır grubu sütun düzeyinde filtreleme
Bu yöntem, büyük veri hacmine sahip senaryolar için uygundur. ORC'deki her satır grubu 10.000 satır içerdiğinden, veri hacmi çok küçük olduğunda filtreleme etkisi belirgin değildir.
-
Verileri hazırlayın. Hologres örneğinde bir test tablosu oluşturun.
DROP TABLE IF EXISTS test_2m_data; BEGIN; CREATE TABLE test_2m_data ( id INT NOT NULL, name TEXT NOT NULL ); -- Set a distribution key to avoid data skew and improve batch write performance. CALL set_table_property('test_2m_data', 'distribution_key', 'id'); COMMIT; INSERT INTO test_2m_data (id, name) SELECT g AS id, 'user_' || g AS name FROM generate_series(1, 2000000) AS g; SELECT COUNT(*) FROM test_2m_data; -
MaxCompute'ta bir Hologres harici tablosu oluşturun.
CREATE EXTERNAL TABLE ext_holo_test_2m_data ( id INT , name STRING ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::*****:role/<role_name>') LOCATION 'jdbc:postgresql://hgpostcn-cn-2bj4lnv16008-cn-<region>-internal.hologres.aliyuncs.com:80/<holo_database>?currentSchema=public&table=test_2m_data' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' ); -
Harici tablo verilerini sorgulayın
-- Enable Hologres direct read SET odps.table.api.enable.holo.table=true; -- Enable PPD SET odps.external.holo.use.predicate.pushdown=true; -- Set the PPD mode SET odps.external.holo.read.table.rules="{predicate_pushdown_mode:on}"; SELECT * FROM ext_holo_test_2m_data where id>100 and id<100000;LogView'deki örneğin stdout ayrıntılarını kontrol edin. Aşağıdakiler gerçekleşirse filtreleme başarılı olur:
TableScan1'de IOCount ve IOLatencyPercentiles görünür.
TableScan1'de ReadRowCount, RequestedRowCount değerinden küçüktür.
37 Filter1 99899 0 99998998 {"PMS":{"S":24584}} 38 GlobalInit 0 769 0 {"CallBack":{"T":1},"CodeGenDCE":{"T":6393},"CodeGenMajorPass":{"T":13954},"CreateCursor":{"T":41350}, "CreateOperator":{"T":309351},"JitFunction":{"T":13027},"LoadAndParseIR":{"T":38273},"OpenShuffleRW":{"T":30}, "parseTableScanInfo":{"T":4551}} 39 TableScan1 163840 1634 100269 {"PMS":{"S":20480},"actualSplitFileCount":0,"actualSplitFileStats":{"avg":0,"max":0,"min":9223372036854775807}, "plannedSplitFileCount":0,"plannedSplitFileStats":{"avg":0,"max":0,"min":9223372036854775807}} {"DecodingCount":320,"DecodingInBytes":147068,"DecodingLatencyUs":1224,"DecodingOutBytes":1310720, "DeltaFileInclusiveLatencyUs":76,"IOBlockingLatencyUs":424255,"IOCount":60,"IOLatencyPercentiles": "{\"Count\":\"60\",\"Percentiles\":\"[[0,2835], [0.5,6183], [0.9,6183], [0.95,6183], [0.99,6183], [0.999,6752], [1, 15206]]\",\"Total\":\"495889\"}","IOReadBytes":27988440,"MaxMemoryUsageBytes":1936240,"ReadRawSize":2346495, "ReadRowCount":163840,"ReaderCount":1,"ReaderInclusiveLatencyUs":447950,"RequestedRowCount":2000000, "StringDirectReadOutBytes":169113,"Type":"OrcReader","VectorBatchConversionLatencyUs":1636} 40 TableScan1@CommonTableReader 0 0 nan {"PMS":{"S":19456}} 41 fuxi 0 0 nan {"PMS":{"S":0}} 42 inst 0 0 nan {"APMS":{"S":0},"PMFM":{"S":1073741824},"PMS":{"S":3246003}}Yukarıdaki çıktıda, TableScan1 operatörü
IOCountveIOLatencyPercentilesalanlarını içerir veReadRowCount(163840) değeriRequestedRowCount(2000000) değerinden küçüktür; bu da yüklem itelemesi filtrelemenin başarılı olduğunu gösterir.
Hologres veri içe ve dışa aktarma
Desteklenen veri türleri
-
Decimal türü sınırlamaları
MaxCompute içinde oluşturulan Hologres harici tablolar için
DECIMALveri türü sabit olarakdecimal(38,18)şeklindedir ve değiştirilemez. Kaynak tablo daha az ondalık basamağa sahipse, MaxCompute harici tablosunda sütunuSTRINGtüründe tanımlayabilir ve veriyi kullanırkenCASTişlevini kullanarak açıkça dönüştürebilirsiniz. -
Karmaşık tür sınırlamaları
MaxCompute içinde oluşturulan Hologres harici tablolar;
Array,MapveyaStructgibi karmaşık veri türlerini desteklemez. -
Diğer uyumsuz türler
Hologres'teki
MONEYgibi veri türleri, MaxCompute'de karşılık gelen bir veri türü bulunmadığından desteklenmez.
Aşağıdaki tabloda Hologres ile MaxCompute arasındaki veri türü eşlemeleri listelenmiştir.
Hologres türü | MaxCompute türü | JDBC okuma | JDBC yazma | Doğrudan okuma (odps.table.api.enable.holo.table=true) | Açıklama |
INTEGER (takma ad: INT veya INT4) | INT | 32 bit işaretli tamsayı. | |||
TEXT | STRING, VARCHAR | Uzunluk sınırı 8 MB olan dize türü. | |||
SMALLINT | SMALLINT | 16 bit işaretli tamsayı. | |||
INT2 | SMALLINT | 16 bit işaretli tamsayı. | |||
BIGINT (takma ad: INT8) | BIGINT | 64 bit işaretli tamsayı. | |||
BYTEA | BINARY | İkili veri türünün geçerli uzunluk sınırı 8 MB'dir. Hologres | |||
REAL (takma ad: FLOAT4) | FLOAT | 32 bit ikili kayan noktalı sayı. | |||
DOUBLE PRECISION (takma ad: FLOAT8) | DOUBLE | 64 bit ikili kayan noktalı sayı. | |||
BOOLEAN (takma ad: BOOL) | BOOLEAN | BOOLEAN türü. | |||
TIMESTAMP | TIMESTAMP_NTZ | Hologres Nanosaniye hassasiyetine sahip MaxCompute | |||
TIMESTAMP WITH TIME ZONE (takma ad: TIMESTAMPTZ) | TIMESTAMP | Zaman damgası veri türü nanosaniye hassasiyetindedir ve Alt düzey hassasiyet dönüşümü otomatik olarak gerçekleştirilir. | |||
DECIMAL (takma ad: NUMERIC) | DECIMAL(precision,scale) | 10 tabanlı kesin sayısal tür.
MaxCompute'te, hassasiyet belirtilmediğinde | |||
CHAR(n) | CHAR(n) | MaxCompute'te Hologres'te | |||
VARCHAR(n) | VARCHAR(n) | MaxCompute'teki Hologres'te | |||
DATE | DATE | Veri türü, | |||
INT4[] | ARRAY<INT> | Hologres dizileri, karşılık gelen MaxCompute | |||
INT8[] | ARRAY<BIGINT> | ||||
FLOAT4[] | ARRAY<FLOAT> | ||||
FLOAT8[] | ARRAY<DOUBLE> | ||||
BOOLEAN[] | ARRAY<BOOLEAN> | ||||
TEXT[] | ARRAY<STRING> | ||||
JSONB | JSON | Hologres | |||
JSON | STRING | JDBC kullanılırken Hologres | |||
SERIAL (otomatik artan) | INT | MaxCompute, Hologres | |||
RoaringBitmap | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
RoaringBitmap64 | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
BIT(n) | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
VARBIT(n) | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
INTERVAL | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
TIMETZ | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
TIME | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
INET | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
MONEY | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
OID | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. | |||
UUID | Desteklenmiyor | MaxCompute'te karşılık gelen bir tür bulunmamaktadır. |
SSS
Hologres verilerini doğrudan okurken ODPS-0130071 hatası
-
Sorun
Hologres'ten doğrudan okuma modunda veri okuduğunuzda, iş
ODPS-0130071 Failed to split to equal size...max count: 7777benzeri bir hata ile başarısız olur. Örneğin:ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: storage/table/src/input_splits_builder.cpp(195): StorageException: Failed to split to equal size, total size: 2143570729934, min size: 268435456, max size: 272629760, max count: 7777, split size: 275629513, split count: 7777 -
Neden
MaxCompute, Hologres'ten veri okurken varsayılan veri bölme stratejisi, mapper örnek sayısının 7.777 eşzamanlılık sınırını aşmasına neden olabilir.
NotBu sınır, aşırı sayıda mapper içeren işlerin çalışmasını engelleyerek Hologres dosyalarının ve ağ bağlantılarının kararlılığını korur.
-
Çözüm
Aşağıdaki parametreleri ayarlayarak bu hatayı çözebilirsiniz.
SET odps.external.holo.mapper.instances=10000; -- Increase the concurrency limit. The maximum value is 10,000. SET odps.sql.mapper.split.size=512; -- Adjust the job concurrency. The maximum value is 512 MB.
Hologres harici tablolarında yavaş SQL işleri
-
Sorun
SDK kullanarak MaxCompute harici tablosunda veri ararken performans düşüktür.
-
Çözüm
Harici tablolar yalnızca tam tablo taramalarını desteklediği için yavaş çalışır. Daha iyi performans için bunun yerine bir MaxCompute dahili tablosu kullanın.
Sütun adı bir anahtar sözcük olduğunda oluşan hata
-
Sorun
Hologres tablonuzdaki bir sütun adı bir anahtar sözcük ise, özel yapılandırma olmadan sorgular aşağıdaki hatalarla başarısız olabilir:
ODPS-0123131:User defined function exception - SQLException in nextKeyValueCaused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "," -
Çözüm
Hologres kaynak tablosunun sütunlarını Hologres harici tablosunun sütunlarıyla eşlemek için
odps.federation.jdbc.colmappingparametresini ekleyin.Örneğin, Hologres kaynak tablosu sütun adı olarak
"offset"anahtar sözcüğünü içeriyorsa, Hologres harici tablosunu oluştururken'odps.federation.jdbc.colmapping'='offset:"offset"'parametresini ekleyin.
Hizmete bağlı rol modunda password authentication failed for user "mcslr$STS.**" hatası
-
Sorun
Bir RAM kullanıcı veya RAM rolü, hizmete bağlı rol yetkilendirme modunu kullanarak bir Hologres harici tablosunu okuduğunda, iş
password authentication failed for user "mcslr$STS.******"hatasıyla başarısız olabilir. Aşağıda bir hata mesajı örneği verilmiştir:Caused by: java.lang.RuntimeException: java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: pooler: c0a981a2413b5: password authentication failed for user "*******$V2#****#TMP.3KvMuCpXhuMbeZsbpaE****m738WfEw73rze ohJUeXxhsKza1khCxdKSJQAU5CFac*****qDCA#STS.NZFkZ3TbJNmAjS2TKLdUHHdiW#**.*.*.***" at org.apache.hadoop.mapreduce.lib.db.DBInputFormat.setConf(DBInputFormat.java:171) at com.aliyun.odps.jdbc.wrapper.InputFormatWrapper.checkAndInitDbInputFormat(InputFormatWrapper.java:48) ... 45 more Caused by: java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: pooler: c0a981a2413b5: password authentication failed for user "*******$V2#****#TMP.3KvMuCpXhuMbeZsbpaE****m738WfEw73rzeohJUeXxhsKza1khCxdKSJQAU 5CFac*****qDCA#STS.NZFkZ3TbJNmAjS2TKLdUHHdiW#**.*.*.***" at org.apache.hadoop.mapreduce.lib.db.DBInputFormat.createConnection(DBInputFormat.java:205) at com.aliyun.odps.jdbc.impl.JdbcDBInputFormat.superCreateConnection(JdbcDBInputFormat.java:69) at com.aliyun.odps.jdbc.impl.JdbcDBInputFormat.createConnection(JdbcDBInputFormat.java:56) at org.apache.hadoop.mapreduce.lib.db.DBInputFormat.setConf(DBInputFormat.java:164) -
Neden
Hizmete bağlı rol yetkilendirme modu başarısız oldu.
-
Çözüm
SQL ifadesinden önce
set odps.external.holo.enable.slr = force;parametresini ekleyerek hizmete bağlı rol yetkilendirme modunu zorla etkinleştirin.
Doğrudan okuma modunda Holo-side PPD disabled --> The Holo snapshot PPD mode is enabled, but FAILED to push down the filter into Holo hatası
-
Hata mesajı
Holo-side PPD disabled --> The Holo snapshot PPD mode is enabled, but FAILED to push down the filter into Holo, errorMsg[storage/table/src/holo/snapshot.cpp(319): StorageException: Create/Get snapshot failed for table: test_multi_type_ppd partition: Query:select holo_create_table_snapshot('public.test_multi_type_ppd', 259200, filter=>$$c_id = 3$$) with error ERROR: internal error: Failed to build fragment dag desc: node type 65 is not supported -
Çözüm
Hologres dahili tablonuzun Kullanım notları bölümündeki gereksinimleri karşıladığından emin olun.
Doğrudan Okuma Modunda Geri Dönüş Gösterimi
Logview'in Summary sekmesinde, external holo tables bölümünde Fallback bilgisi görünüyorsa, bu durum doğrudan okuma modunun kullanılmadığını ve sistemin JDBC moduna geri döndüğünü gösterir. Yaygın hatalar ve nedenler aşağıda listelenmiştir:
Hata ayrıntıları | Kök neden | Çözüm |
Sütun adı <col> Odps türü <X> Holo türü <Y>, özellikle şu şekilde belirtilir:
| Sütun türü eşleme hatası | Hologres harici tablo alanlarının sütun türleri kaynak tablonunkilerle eşleşmiyor. Doğrudan okuma modunu etkinleştirmek için harici tablonun veri türünü veri türü eşlemesine göre değiştirin. |
Odps tablo şeması geçersiz | Genelleme hatası: Ayrıntılar için Logview'deki Hata Günlüklerine bakın. |
|
Holo bağlantı hatası | Hologres Örnek Bağlantı İstisnası | Yanlış izin bilgileri veya anormal Hologres örnek durumu. Geçerli kullanıcının ilgili Hologres veritabanına erişim iznine sahip olduğunu doğrulayın veya Hologres örneğinin şu anda hizmet verebilir durumda olup olmadığını kontrol edin. |
Select hg_version hatası/Hologres sürüm kontrolü hatası/Fetch hg_version veri hatası | Yanlış Hologres örnek sürümü | Hologres örneğini V1.3.34 veya sonraki bir sürüme yükseltin. Örnek sürümünü yükseltmeyle ilgili ayrıntılar için bkz. Örnek yükseltme。 |
Referanslar
Hologres yabancı tablolarıyla ilgili yaygın sorunlar hakkında daha fazla bilgi için Lakehouse ve Yabancı Tablo SSS konusuna bakın.