全部产品
Search
文档中心

ApsaraDB for SelectDB:Analisis File

更新时间:Jul 30, 2025

ApsaraDB for SelectDB menyediakan fungsi bernilai tabel (TVFs) yang memungkinkan Anda memetakan data file dari penyimpanan remote seperti Amazon Simple Storage Service (Amazon S3) dan Sistem File Terdistribusi Hadoop (HDFS) ke tabel di ApsaraDB for SelectDB, sehingga memudahkan analisis data file.

Amazon S3 TVF

Amazon S3 TVF, s3(), memungkinkan Anda membaca dan mengakses isi file dalam sistem penyimpanan objek yang kompatibel dengan Amazon S3 sebagaimana Anda mengakses isi file dalam database relasional. Format file yang didukung meliputi CSV, CSV_with_names, CSV_with_names_and_types, JSON, Parquet, dan ORC.

Sintaksis

s3(
  "uri" = "..",
  "s3.access_key" = "...",
  "s3.secret_key" = "...",
  "s3.region" = "...",
  "format" = "csv",
  "keyn" = "valuen",
  ...
);

Parameter

Setiap parameter dalam Amazon S3 TVF adalah pasangan kunci-nilai dalam format "key" = "value". Tabel berikut menjelaskan parameter umum.

Parameter

Diperlukan

Nilai valid

Deskripsi

uri

Ya

String

Pengenal sumber daya seragam (URI) untuk mengakses Amazon S3.

s3.access_key

Ya

String

ID kunci akses yang digunakan untuk mengakses Amazon S3.

s3.secret_key

Ya

String

Kunci akses rahasia yang digunakan untuk mengakses Amazon S3.

s3.region

Ya

String

Wilayah Amazon S3. Nilai default: us-east-1.

s3.session_token

Tidak

Catatan

Parameter ini diperlukan jika otentikasi sesi sementara diaktifkan.

String

Token sesi sementara yang digunakan untuk mengakses Amazon S3.

use_path_style

Tidak

  • true

  • false

Menentukan apakah akan menggunakan gaya path untuk mengakses Amazon S3. Secara default, SDK Amazon S3 menggunakan gaya virtual-hosted. Namun, gaya virtual-hosted mungkin tidak diaktifkan atau didukung oleh beberapa sistem penyimpanan objek. Dalam hal ini, Anda dapat menentukan parameter use_path_style untuk memaksa menggunakan gaya path. Misalnya, MinIO hanya mengizinkan gaya path secara default. Untuk mengakses MinIO, atur parameter use_path_style ke true.

Nilai default: false.

Catatan

Skema URI berikut didukung: http://, https://, dan s3://.

  • Jika http:// atau https:// digunakan, sistem menentukan apakah akan menggunakan gaya path untuk mengakses Amazon S3 berdasarkan nilai parameter use_path_style.

  • Jika s3:// digunakan, gaya virtual-hosted digunakan untuk mengakses Amazon S3.

  • Jika URI yang ditentukan tidak ada atau file yang cocok semuanya kosong, Amazon S3 TVF mengembalikan set hasil kosong.

format

Ya

  • cvs

  • csv_with_names

  • csv_with_names_and_types

  • json

  • parquet

  • orc

Format file yang akan diakses di Amazon S3.

column_separator

Tidak

String

Pemisah kolom. Nilai default: ,.

line_delimiter

Tidak

String

Pemisah baris. Nilai default: \n.

compress_type

Tidak

  • unknown

  • plain

  • gz

  • lzo

  • bz2

  • lz4frame

  • deflate

Tipe kompresi file. Nilai default: unknown, yang menunjukkan bahwa tipe kompresi secara otomatis disimpulkan berdasarkan akhiran URI.

read_json_by_line

Tidak

  • true

  • false

Menentukan apakah membaca data berformat JSON per baris. Nilai default: true.

num_as_string

Tidak

  • true

  • false

Menentukan apakah memproses angka sebagai string. Nilai default: false.

fuzzy_parse

Tidak

  • true

  • false

Menentukan apakah mempercepat efisiensi impor data berformat JSON. Nilai default: false.

jsonpaths

Tidak

String

Bidang yang akan diekstraksi dari data berformat JSON.

Format: jsonpaths: [\"$.k2\", \"$.k1\"].

strip_outer_array

Tidak

  • true

  • false

Menentukan apakah menampilkan data berformat JSON sebagai array. Setiap elemen dianggap sebagai satu baris data. Nilai default: false.

Format: strip_outer_array: true.

json_root

Tidak

String

Node root dari data berformat JSON. ApsaraDB for SelectDB mengekstrak dan mem-parsing elemen node root yang ditentukan oleh parameter json_root. Secara default, parameter ini dibiarkan kosong.

Format: json_root: $.RECORDS.

path_partition_keys

Tidak

String

Nama kolom kunci partisi yang dibawa dalam jalur file yang ditentukan. Misalnya, jika jalur file adalah /path/to/city=beijing/date="2023-07-09", atur parameter ini ke city,date. Dalam hal ini, ApsaraDB for SelectDB secara otomatis membaca nama kolom dan nilai kolom yang sesuai dari jalur selama impor data.

Contoh

  1. Membaca dan mengakses file CSV dalam sistem penyimpanan objek yang kompatibel dengan Amazon S3.

    SELECT * FROM s3("uri" = "http://127.0.0.1:9312/test2/student1.csv",
                    "s3.access_key"= "minioadmin",
                    "s3.secret_key" = "minioadmin",
                    "format" = "csv",
                    "use_path_style" = "true") ORDER BY c1;  

    Anda dapat menggunakan TVF ini bersama dengan fungsi DESC FUNCTION untuk menanyakan skema file.

    MySQL [(none)]> Desc FUNCTION s3("uri" = "http://127.0.0.1:9312/test2/student1.csv",
                     "s3.access_key"= "minioadmin",
                     "s3.secret_key" = "minioadmin",
                     "format" = "csv",
                     "use_path_style" = "true");
  2. Gunakan gaya virtual-hosted untuk mengakses Object Storage Service (OSS).

    SELECT * FROM s3(
        "uri" = "http://example-bucket.oss-cn-beijing.aliyuncs.com/your-folder/file.parquet",
        "s3.access_key"= "ak",
        "s3.secret_key" = "sk",
        "format" = "parquet",
        "use_path_style" = "false");
  3. Jika parameter use_path_style diatur ke true, gaya path digunakan untuk mengakses Amazon S3.

    SELECT * FROM s3(
        "uri" = "https://endpoint/bucket/file/student.csv",
        "s3.access_key"= "ak",
        "s3.secret_key" = "sk",
        "format" = "csv",
        "use_path_style"="true");
  4. Jika parameter use_path_style diatur ke false, gaya virtual-hosted digunakan untuk mengakses Amazon S3.

    SELECT * FROM s3(
        "uri" = "https://bucket.endpoint/bucket/file/student.csv",
        "s3.access_key"= "ak",
        "s3.secret_key" = "sk",
        "format" = "csv",
        "use_path_style"="false");

HDFS TVF

HDFS TVF, hdfs(), memungkinkan Anda membaca dan mengakses isi file dalam HDFS sebagaimana Anda mengakses isi file dalam database relasional. Format file yang didukung meliputi CSV, CSV_with_names, CSV_with_names_and_types, JSON, Parquet, dan ORC.

Sintaksis

hdfs(
  "uri" = "..",
  "fs.defaultFS" = "...",
  "hadoop.username" = "...",
  "format" = "csv",
  "keyn" = "valuen" 
  ...
);

Parameter

Setiap parameter dalam HDFS TVF adalah pasangan kunci-nilai dalam format "key" = "value". Tabel berikut menjelaskan parameter umum.

Parameter

Diperlukan

Nilai valid

Deskripsi

uri

Ya

String

URI untuk mengakses HDFS. Jika URI yang ditentukan tidak ada atau file yang cocok semuanya kosong, HDFS TVF mengembalikan set hasil kosong.

fs.defaultFS

Ya

String

Hostname dan nomor port HDFS.

hadoop.username

Ya

String

Nama pengguna yang digunakan untuk mengakses HDFS. Nilainya tidak boleh berupa string kosong.

hadoop.security.authentication

Tidak

  • Simple

  • Kerberos

Metode autentikasi untuk HDFS. Nilai valid: Simple dan Kerberos.

hadoop.kerberos.principal

Tidak

String

Principal Kerberos jika otentikasi Kerberos diaktifkan untuk HDFS.

hadoop.kerberos.keytab

Tidak

String

Path file keytab Kerberos jika otentikasi Kerberos diaktifkan untuk HDFS.

dfs.client.read.shortcircuit

Tidak

  • true

  • false

Menentukan apakah membaca data short circuit lokal HDFS. Nilainya bertipe BOOLEAN.

dfs.domain.socket.path

Tidak

String

Path yang menunjuk ke soket domain UNIX untuk komunikasi antara DataNode dan klien HDFS lokal. Jika Anda menentukan string "_PORT" dalam path, string tersebut diganti dengan port TCP DataNode.

dfs.nameservices

Tidak

String

Nama logis nameservices yang menyediakan layanan. Parameter ini sesuai dengan bidang dfs.nameservices dalam file core-site.xml.

dfs.ha.namenodes.your-nameservices

Tidak

Catatan

Parameter ini diperlukan jika penerapan High Availability (HA) Hadoop digunakan.

String

Nama logis NameNodes.

dfs.namenode.rpc-address.your-nameservices.your-namenode

Tidak

Catatan

Parameter ini diperlukan jika penerapan HA Hadoop digunakan.

String

URL HTTP tempat NameNode mendengarkan.

dfs.client.failover.proxy.provider.your-nameservices

Tidak

Catatan

Parameter ini diperlukan jika penerapan HA Hadoop digunakan.

String

Kelas implementasi penyedia proxy failover untuk koneksi klient ke NameNode dalam keadaan tersedia.

read_json_by_line

Tidak

  • true

  • false

Menentukan apakah membaca data berformat JSON per baris. Nilai default: true.

num_as_string

Tidak

  • true

  • false

Menentukan apakah memproses angka sebagai string. Nilai default: false.

fuzzy_parse

Tidak

  • true

  • false

Menentukan apakah mempercepat efisiensi impor data berformat JSON. Nilai default: false.

jsonpaths

Tidak

String

Bidang yang akan diekstraksi dari data berformat JSON.

Format: jsonpaths: [\"$.k2\", \"$.k1\"].

strip_outer_array

Tidak

  • true

  • false

Menentukan apakah menampilkan data berformat JSON sebagai array. Setiap elemen dianggap sebagai satu baris data. Nilai default: false.

Format: strip_outer_array: true.

json_root

Tidak

String

Node root dari data berformat JSON. ApsaraDB for SelectDB mengekstrak dan mem-parsing elemen node root yang ditentukan oleh parameter json_root. Secara default, parameter ini dibiarkan kosong.

Format: json_root: $.RECORDS.

trim_double_quotes

Tidak

  • true

  • false

Menentukan apakah memotong tanda kutip ganda (") terluar dari setiap bidang dalam file CSV. Nilai default: false.

skip_lines

Tidak

[0-Integer.MaxValue]

Nilainya bertipe INTEGER. Nilai default: 0. Menentukan apakah melewati beberapa baris pertama file CSV. Parameter ini menjadi tidak valid jika parameter format diatur ke csv_with_names atau csv_with_names_and_types.

path_partition_keys

Tidak

String

Nama kolom kunci partisi yang dibawa dalam jalur file yang ditentukan. Misalnya, jika jalur file adalah /path/to/city=beijing/date="2023-07-09", atur parameter ini ke city,date. Dalam hal ini, ApsaraDB for SelectDB secara otomatis membaca nama kolom dan nilai kolom yang sesuai dari jalur selama impor data.

Contoh

Membaca dan mengakses file CSV dalam HDFS.

MySQL [(none)]> SELECT * FROM hdfs(
            "uri" = "hdfs://127.0.0.1:842/user/doris/csv_format_test/student.csv",
            "fs.defaultFS" = "hdfs://127.0.0.1:8424",
            "hadoop.username" = "doris",
            "format" = "csv");
            
-- Contoh tanggapan   
+------+---------+------+
| c1   | c2      | c3   |
+------+---------+------+
| 1    | alice   | 18   |
| 2    | bob     | 20   |
| 3    | jack    | 24   |
| 4    | jackson | 19   |
| 5    | liming  | 18   |
+------+---------+------+

Membaca dan mengakses file CSV dalam HDFS dalam mode high availability (HA).

MySQL [(none)]> SELECT * FROM hdfs(
            "uri" = "hdfs://127.0.0.1:842/user/doris/csv_format_test/student.csv",
            "fs.defaultFS" = "hdfs://127.0.0.1:8424",
            "hadoop.username" = "doris",
            "format" = "csv",
            "dfs.nameservices" = "my_hdfs",
            "dfs.ha.namenodes.my_hdfs" = "nn1,nn2",
            "dfs.namenode.rpc-address.my_hdfs.nn1" = "nanmenode01:8020",
            "dfs.namenode.rpc-address.my_hdfs.nn2" = "nanmenode02:8020",
            "dfs.client.failover.proxy.provider.my_hdfs" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");

-- Contoh tanggapan
+------+---------+------+
| c1   | c2      | c3   |
+------+---------+------+
| 1    | alice   | 18   |
| 2    | bob     | 20   |
| 3    | jack    | 24   |
| 4    | jackson | 19   |
| 5    | liming  | 18   |
+------+---------+------+

Anda dapat menggunakan TVF ini bersama dengan fungsi DESC FUNCTION untuk menanyakan skema file.

MySQL [(none)]> DECS FUNCTION hdfs(
            "uri" = "hdfs://127.0.0.1:8424/user/doris/csv_format_test/student_with_names.csv",
            "fs.defaultFS" = "hdfs://127.0.0.1:8424",
            "hadoop.username" = "doris",
            "format" = "csv_with_names");

Penggunaan

Bagian ini menjelaskan cara menggunakan TVF untuk menganalisis data file. Dalam contoh ini, Amazon S3 TVF digunakan.

Otomatis menyimpulkan tipe kolom file

ApsaraDB for SelectDB dapat menganalisis dan menyimpulkan tipe kolom file dalam format Parquet, ORC, CSV, dan JSON.

> DESC FUNCTION s3 (
    "URI" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
    "s3.access_key"= "ak",
    "s3.secret_key" = "sk",
    "format" = "parquet",
    "use_path_style"="true"
);

-- Contoh tanggapan
+---------------+--------------+------+-------+---------+-------+
| Field         | Type         | Null | Key   | Default | Extra |
+---------------+--------------+------+-------+---------+-------+
| p_partkey     | INT          | Yes  | false | NULL    | NONE  |
| p_name        | TEXT         | Yes  | false | NULL    | NONE  |
| p_mfgr        | TEXT         | Yes  | false | NULL    | NONE  |
| p_brand       | TEXT         | Yes  | false | NULL    | NONE  |
| p_type        | TEXT         | Yes  | false | NULL    | NONE  |
| p_size        | INT          | Yes  | false | NULL    | NONE  |
| p_container   | TEXT         | Yes  | false | NULL    | NONE  |
| p_retailprice | DECIMAL(9,0) | Yes  | false | NULL    | NONE  |
| p_comment     | TEXT         | Yes  | false | NULL    | NONE  |
+---------------+--------------+------+-------+---------+-------+

Contoh tanggapan menunjukkan bahwa ApsaraDB for SelectDB dapat secara otomatis menyimpulkan tipe kolom file Parquet berdasarkan metadata file.

Membaca skema file CSV

Secara default, ApsaraDB for SelectDB memproses tipe semua kolom dalam file CSV sebagai STRING. Anda dapat menggunakan parameter csv_schema untuk menentukan nama kolom dan tipe kolom file CSV secara terpisah. ApsaraDB for SelectDB membaca skema file CSV berdasarkan tipe kolom yang ditentukan. Format:

name1:type1;name2:type2;...

ApsaraDB for SelectDB mengembalikan NULL untuk kolom dengan tipe yang tidak cocok atau kolom yang hilang. Misalnya, tipe kolom adalah STRING tetapi Anda menentukan tipe kolom sebagai INT, atau Anda menentukan lima kolom untuk file yang berisi empat kolom. Tabel berikut menjelaskan tipe kolom yang didukung.

Tipe kolom

Tipe pemetaan

tinyint

tinyint

smallint

smallint

int

int

bigint

bigint

largeint

largeint

float

float

double

double

decimal(p,s)

decimalv3(p,s)

date

datev2

datetime

datetimev2

char

string

varchar

string

string

string

boolean

boolean

Contoh:

s3 (
    "URI" = "https://bucket1/inventory.dat",
    "s3.access_key"= "ak",
    "s3.secret_key" = "sk",
    "format" = "csv",
    "column_separator" = "|",
    "csv_schema" = "k1:int;k2:int;k3:int;k4:decimal(38,10)",
    "use_path_style"="true"
)

Kueri dan analisis data

Anda dapat menggunakan TVF bersama dengan pernyataan SQL untuk menanyakan dan menganalisis file.

SELECT * FROM s3(
    "URI" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
    "s3.access_key"= "ak",
    "s3.secret_key" = "sk",
    "format" = "parquet",
    "use_path_style"="true")
LIMIT 5;

-- Contoh tanggapan
+-----------+------------------------------------------+----------------+----------+-------------------------+--------+-------------+---------------+---------------------+
| p_partkey | p_name                                   | p_mfgr         | p_brand  | p_type                  | p_size | p_container | p_retailprice | p_comment           |
+-----------+------------------------------------------+----------------+----------+-------------------------+--------+-------------+---------------+---------------------+
|         1 | goldenrod lavender spring chocolate lace | Manufacturer#1 | Brand#13 | PROMO BURNISHED COPPER  |      7 | JUMBO PKG   |           901 | ly. slyly ironi     |
|         2 | blush thistle blue yellow saddle         | Manufacturer#1 | Brand#13 | LARGE BRUSHED BRASS     |      1 | LG CASE     |           902 | lar accounts amo    |
|         3 | spring green yellow purple cornsilk      | Manufacturer#4 | Brand#42 | STANDARD POLISHED BRASS |     21 | WRAP CASE   |           903 | egular deposits hag |
|         4 | cornflower chocolate smoke green pink    | Manufacturer#3 | Brand#34 | SMALL PLATED BRASS      |     14 | MED DRUM    |           904 | p furiously r       |
|         5 | forest brown coral puff cream            | Manufacturer#3 | Brand#32 | STANDARD POLISHED TIN   |     15 | SM PKG      |           905 |  wake carefully     |
+-----------+------------------------------------------+----------------+----------+-------------------------+--------+-------------+---------------+---------------------+

Anda dapat menempatkan TVF di mana saja Anda menempatkan tabel dalam pernyataan SQL, seperti dalam klausa WITH atau FROM ekspresi tabel umum (CTE). Anda dapat menganalisis file sebagai tabel standar.

Anda juga dapat membuat tampilan logis untuk TVF dengan menggunakan pernyataan CREATE VIEW. Ini memungkinkan Anda mengakses TVF ini dan mengelola izinnya sebagaimana Anda melakukan operasi pada tampilan lainnya. Anda juga dapat mengizinkan pengguna lain untuk mengakses TVF ini.

CREATE VIEW v1 AS 
SELECT * FROM s3(
    "URI" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
    "s3.access_key"= "ak",
    "s3.secret_key" = "sk",
    "format" = "parquet",
    "use_path_style"="true");

DESC v1;

SELECT * FROM v1;

GRANT SELECT_PRIV ON db1.v1 TO user1;

Impor data

Anda dapat menggunakan TVF bersama dengan pernyataan INSERT INTO SELECT untuk mengimpor data file ke tabel di ApsaraDB for SelectDB guna analisis yang lebih cepat.

-- 1. Buat tabel internal di ApsaraDB for SelectDB.
CREATE TABLE IF NOT EXISTS test_table
(
    id int,
    name varchar(50),
    age int
)
DISTRIBUTED BY HASH(id) BUCKETS 4
PROPERTIES("replication_num" = "1");

-- 2. Masukkan data menggunakan Amazon S3 TVF.
INSERT INTO test_table (id,name,age)
SELECT cast(id as INT) as id, name, cast (age as INT) as age
FROM s3(
    "uri" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
    "s3.access_key"= "ak",
    "s3.secret_key" = "sk",
    "format" = "parquet",
    "use_path_style" = "true");

Catatan penggunaan

  • Jika tidak ada file yang cocok untuk URI yang ditentukan oleh Amazon S3 atau HDFS TVF, atau jika semua file yang cocok kosong, Amazon S3 atau HDFS TVF mengembalikan set hasil kosong. Dalam hal ini, jika Anda menjalankan pernyataan DESC FUNCTION untuk menanyakan skema file yang ditentukan oleh TVF, kolom dummy __dummy_col dikembalikan, yang dapat diabaikan.

  • Jika format file yang ditentukan oleh TVF adalah CSV dan file yang dibaca tidak kosong tetapi baris pertama file kosong, pesan kesalahan The first line is empty, can not parse column numbers dilaporkan.