MaxCompute, OSS üzerindeki Parquet harici tablolarında şemasız sorguları destekler. Ayrıştırılan veri kümesini OSS'e dışa aktarabilir, dahili bir tabloya yazabilir veya esnek veri gölü işleme için SQL işlemlerinde alt sorgu olarak kullanabilirsiniz.
Arka plan bilgileri
Spark ile yapılandırılmış verilerin geçici keşfi sabit bir veri ambarı modeli gerektirmez. Ancak, OSS'ten okuma veya yazma yapmadan önce tablo şemalarını tanımlamak ve dosya alanlarını manuel olarak eşlemek bölüm yönetimini zahmetli ve esnek olmayan hale getirir.
LOAD yönergesiyle MaxCompute, Parquet dosyalarını otomatik olarak ayrıştırır ve verileri şema farkındalığına sahip bir veri kümesi olarak okur. Bu veri kümesinden belirli sütunları doğrudan seçerek tablo işlemlerine benzer şekilde işleyebilirsiniz. Sonuçları OSS'e dışa aktarmak için UNLOAD komutunu veya bunları dahili bir tabloya aktarmak için CREATE TABLE AS deyimini kullanın. Veri kümesi, veri gölü verilerinde esnek işlemler için diğer SQL deyimlerinde alt sorgu olarak da hizmet edebilir.
Uygulanabilirlik
Şemasız Sorgu, OSS paketindeki alt dizinlerin bölüm olarak değerlendirilmesini desteklemez.
JSON biçimli veriler için yalnızca JSONL desteklenir.
Sözdizimi
SELECT *, <col_name>, <table_alias>.<col_name>
FROM
LOCATION '<location_path>'
('key'='value' [, 'key1'='value1', ...])
[AS <table_alias>];
Parametre açıklamaları
Parametre | Gerekli | Açıklama |
* | Evet | Dosyadaki tüm alanları sorgular. |
col_name | Evet | Dosyadaki sütun adına göre bir alanı sorgular. DECIMAL türü yalnızca |
table_alias.col_name | Evet | Tablo takma adı ve sütun adının tam nitelikli yolunu kullanarak sütun adına göre bir alanı sorgular. |
table_alias | Hayır | Özel tablo takma adı. |
location_path | Evet |
|
key&value | Evet | Sorgu deyimi için parametreler ve değerleri. Ayrıntılar için aşağıdaki tabloya bakın. |
Anahtar-değer parametre tablosu
Anahtar | Gerekli | Açıklama | Değer | Varsayılan |
file_format | Evet | Konumdaki dosya biçimi. Yalnızca Parquet ve JSON desteklenir. Diğer biçimler hata döndürür. | parquet、json | parquet |
rolearn | Hayır | Konuma erişmek için gereken RoleARN.
Not SQL ifadesinde bir RoleARN belirtmezseniz sistem |
| acs:ram::1234****:role/aliyunodpsdefaultrole |
file_pattern_blacklist | Hayır | Hariç tutulacak dosyaların engelleme listesi. Adı desene uyan dosyalar okunmaz. |
| Yok |
file_pattern_whitelist | Hayır | Dahil edilecek dosyaların izin listesi. Yalnızca adı desene uyan dosyalar okunur. |
|
|
Örnekler
Örnek 1: Engelleme ve izin listesi parametrelerini kullanarak OSS verilerini okuma
-
Verileri hazırlayın.
OSS konsolu içinde oturum açın.
Sol gezinme bölmesinde Buckets öğesini tıklayın.
Buckets sayfasında Create Bucket öğesini tıklayın.
OSS paket dizini
object-table-test/schema/oluşturun.-
Okuma ve izin listesi doğrulaması için bir Parquet dosyası hazırlayın. Dosyayı oluşturmak üzere aşağıdaki Python kodunu yerel olarak çalıştırın.
import pandas as pd # Sample data data = [ {'id': 3, 'name': 'Charlie', 'age': 35}, {'id': 4, 'name': 'David', 'age': 40}, {'id': 5, 'name': 'Eve', 'age': 28} ] df = pd.DataFrame(data) df['id'] = df['id'].astype('int32') df['name'] = df['name'].astype('str') df['age'] = df['age'].astype('int32') output_filename = 'sample_data.parquet' df.to_parquet(output_filename, index=False, engine='pyarrow') -
Parquet dosyasını
object-table-test/schema/OSS paket dizinine yükleyin.OSS konsolu içinde oturum açın.
object-table-test/schema/paket dizininde Upload File öğesini tıklayın.
Engelleme listesi parametresini doğrulamak üzere
object-table-test/schema/OSS paket dizininde bir CSV dosyası hazırlayın.
-
Parquet dosyasını okuyun.
MaxCompute istemcisine (odpscmd) giriş yapın ve aşağıdaki SQL komutlarını çalıştırın.
-
test_oss.csvöğesini engelleme listesine ekleyin ve Parquet dosyasını OSS'ten okuyun.SELECT id, name, age FROM location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ( 'file_format'='parquet', 'rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole', 'file_pattern_blacklist'='.*test_oss.*' ); -
sample_dataöğesini izin listesine ekleyin ve Parquet dosyasını OSS'ten okuyun.SELECT id, name, age FROM location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ( 'file_format'='parquet', 'rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole', 'file_pattern_whitelist'='.*sample_data.*' );
Her iki durumda da
sample_datadosyası okunur. Aşağıdaki sonuç döndürülür:+------------+------------+------------+ | id | name | age | +------------+------------+------------+ | 3 | Charlie | 35 | | 4 | David | 40 | | 5 | Eve | 28 | +------------+------------+------------+ -
Örnek 2: Spark tarafından yazılan verileri okuma
OSS paket dizini
object-table-test/spark/oluşturun.-
Serverless Spark kullanarak Parquet verileri oluşturun. Daha fazla bilgi için bkz. SQL işi oluşturma. OSS dizininde zaten Spark tarafından yazılmış Parquet dosyaları varsa bu adımı atlayın.
E-MapReduce konsolu içinde oturum açın ve sol üst köşeden bir bölge seçin.
Sol gezinme bölmesinde seçeneğini belirleyin.
Spark sayfasında hedef çalışma alanınızın adını tıklayarak açın. Alternatif olarak Create Workspace öğesini tıklayın. Yeni çalışma alanı oluşturulduktan sonra açmak için adını tıklayın.
-
Sol gezinme bölmesinde Data Development seçeneğini belirleyin ve ardından aşağıdaki SQL deyimlerini çalıştırmak için bir Spark SQL dosyası oluşturun:
CREATE TABLE example_table_parquet04 ( id STRING, name STRING, age STRING, salary DOUBLE, is_active BOOLEAN, created_at TIMESTAMP, details STRUCT<department:STRING, position:STRING> ) USING PARQUET; INSERT INTO example_table_parquet04 VALUES ('1', 'Alice', '30', 5000.50, TRUE, TIMESTAMP '2024-01-01 10:00:00', STRUCT('HR', 'Manager')), ('2', 'Bob', '25', 6000.75, FALSE, TIMESTAMP '2024-02-01 11:00:00', STRUCT('Engineering', 'Developer')), ('3', 'Charlie','35', 7000.00, TRUE, TIMESTAMP '2024-03-01 12:00:00', STRUCT('Marketing', 'Analyst')), ('4', 'David', '40', 8000.25, FALSE, TIMESTAMP '2024-04-01 13:00:00', STRUCT('Sales', 'Representative')), ('5', 'Eve', '28', 5500.50, TRUE, TIMESTAMP '2024-05-01 14:00:00', STRUCT('Support', 'Technician')); SELECT * FROM example_table_parquet04;
OSS konsoluna giriş yapın ve hedef yoldaki oluşturulan veri dosyalarını görüntüleyin.
-
MaxCompute istemcisine giriş yapın,
_SUCCESSöğesini engelleme listesine ekleyin ve Parquet dosyasını OSS'ten okuyun.SELECT * FROM location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/spark/example_table_parquet04/' ( 'file_format'='parquet', 'rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole', 'file_pattern_blacklist'='.*_SUCCESS.*' );Aşağıdaki sonuç döndürülür:
+----+---------+-----+------------+-----------+---------------------+----------------------------------------------+ | id | name | age | salary | is_active | created_at | details | +----+---------+-----+------------+-----------+---------------------+----------------------------------------------+ | 1 | Alice | 30 | 5000.5 | true | 2024-01-01 10:00:00 | {department:HR, position:Manager} | | 2 | Bob | 25 | 6000.75 | false | 2024-02-01 11:00:00 | {department:Engineering, position:Developer} | | 3 | Charlie | 35 | 7000.0 | true | 2024-03-01 12:00:00 | {department:Marketing, position:Analyst} | | 4 | David | 40 | 8000.25 | false | 2024-04-01 13:00:00 | {department:Sales, position:Representative} | | 5 | Eve | 28 | 5500.5 | true | 2024-05-01 14:00:00 | {department:Support, position:Technician} | +----+---------+-----+------------+-----------+---------------------+----------------------------------------------+
Şemasız Sorgu işlemleri hakkında daha fazla bilgi için bkz. Şemasız Sorgu kullanarak veri gölünden Parquet verilerini okuma.
Örnek 3: Alt sorguda Şemasız Sorgu kullanma
-
Verileri hazırlayın.
OSS konsoluna giriş yapın ve test dosyası part-00001.snappy.parquet öğesini OSS paket dizini
object-table-test/schema/konumuna yükleyin. Daha fazla bilgi için bkz. OSS dosyaları yükleme. -
MaxCompute istemcisine giriş yapın ve OSS'ten otomatik olarak keşfedilen verileri depolamak için dahili bir tablo oluşturun.
CREATE TABLE ow_test ( id INT, name STRING, age INT ); -
Şemasız Sorgu kullanarak OSS'ten verileri okuyun.
SELECT * FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ( 'file_format'='parquet' );Aşağıdaki sonuç döndürülür:
+------------+------------+------------+ | id | name | age | +------------+------------+------------+ | 3 | Charlie | 35 | | 4 | David | 40 | | 5 | Eve | 28 | +------------+------------+------------+ -
OSS verilerini dıştaki bir SQL deyimine alt sorgu olarak kullanarak ow_test tablosuna ekleyin.
INSERT OVERWRITE TABLE ow_test SELECT id,name,age FROM ( SELECT * FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ( 'file_format'='parquet' ) ); SELECT * FROM ow_test;Aşağıdaki sonuç döndürülür:
+------------+------------+------------+ | id | name | age | +------------+------------+------------+ | 3 | Charlie | 35 | | 4 | David | 40 | | 5 | Eve | 28 | +------------+------------+------------+
Örnek 4: Şemasız Sorgu sonuçlarını dahili bir veri ambarı tablosuna kaydetme
-
Verileri hazırlayın.
OSS konsoluna giriş yapın ve test dosyası part-00001.snappy.parquet öğesini OSS paket dizini
object-table-test/schema/konumuna yükleyin. Daha fazla bilgi için bkz. OSS dosyaları yükleme. -
MaxCompute istemcisine giriş yapın ve Şemasız Sorgu kullanarak OSS'ten verileri okuyun.
SELECT * FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ( 'file_format'='parquet' );Aşağıdaki sonuç döndürülür:
+------------+------------+------------+ | id | name | age | +------------+------------+------------+ | 3 | Charlie | 35 | | 4 | David | 40 | | 5 | Eve | 28 | +------------+------------+------------+ -
Otomatik olarak keşfedilen OSS verilerini dahili bir tabloya kopyalamak için
CREATE TABLE ASdeyimini kullanın, ardından sonucu görüntülemek için tabloyu sorgulayın.CREATE TABLE ow_test_2 AS SELECT * FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ( 'file_format'='parquet' ); -- Query the result table ow_test_2 SELECT * FROM ow_test_2;Aşağıdaki sonuç döndürülür:
+------------+------------+------------+ | id | name | age | +------------+------------+------------+ | 3 | Charlie | 35 | | 4 | David | 40 | | 5 | Eve | 28 | +------------+------------+------------+
Örnek 5: Şemasız Sorgu sonuçlarını veri gölüne geri UNLOAD etme
-
Verileri hazırlayın.
OSS konsoluna giriş yapın ve test dosyası part-00001.snappy.parquet öğesini OSS paket dizini
object-table-test/schema/konumuna yükleyin. Daha fazla bilgi için bkz. OSS dosyaları yükleme. -
MaxCompute istemcisine giriş yapın ve Şemasız Sorgu kullanarak OSS'ten verileri okuyun.
SELECT * FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ( 'file_format'='parquet' );Aşağıdaki sonuç döndürülür:
+------------+------------+------------+ | id | name | age | +------------+------------+------------+ | 3 | Charlie | 35 | | 4 | David | 40 | | 5 | Eve | 28 | +------------+------------+------------+ -
Otomatik olarak keşfedilen sonuçları OSS'e dışa aktarmak için UNLOAD komutunu kullanın. Daha fazla bilgi için bkz. UNLOAD.
UNLOAD FROM ( SELECT * FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/schema/' ('file_format'='parquet') ) INTO LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/unload/ow_test_3/' ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' WITH SERDEPROPERTIES ('odps.external.data.enable.extension'='true') STORED AS PARQUET;OSS dizininde oluşturulan dosyayı görüntüleyin: Komut başarıyla çalıştıktan sonra
unload/ow_test_3/OSS yolunda20250715070650775g0etr15glr2_M1_1_0_0-0_TableSink1.parquetParquet dosyası oluşturulur. Dosya boyutu 0,449 KB'dir ve depolama sınıfı Standart'tır.
Örnek 6: JSON biçimli verileri okuma
Yalnızca JSONL dosyaları desteklenir.
JSONL test verilerini OSS'e yükleyin. sample_data.jsonl
-
Şemasız Sorgu kullanarak sample_data.jsonl dosyasını okuyun.
SELECT * FROM location 'oss://oss-<region>-internal.aliyuncs.com/<path>' ( 'file_format'='json', 'rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' );