Cách sử dụng OSS Location trong Phân tích hồ sơ dữ liệu (DLA)

Điểm tin - Ngày đăng : 21:45, 04/12/2018

Do kích thước khổng lồ của các trung tâm hồ sơ dữ liệu, làm việc với chúng có thể rất phức tạp. Trong bài này, chúng tôi xem xét cách sử dụng một vài công cụ tiện dụng để phân tích hồ sơ dữ liệu.

Kết quả hình ảnh cho How to Use OSS LOCATION in Data Lake Analytics

Công cụ phân tích dữ liệu trên đám mây của Alibaba (DLA) cho phép bạn truy vấn trực tiếp và phân tích dữ liệu được lưu trữ trong các dịch vụ lưu trữ đối tượng (OSS) và lưu trữ bảng bằng cách sử dụng các câu lệnh SQL chuẩn.

Trước khi truy vấn dữ liệu, bạn phải tạo một bảng trong DLA dựa trên định dạng và nội dung của tệp dữ liệu. Hướng dẫn này lấy một tệp được lưu trữ trong một cá thể OSS làm ví dụ để giải thích cách xác định vị trí của một bảng.

OSS LOCATION

Trong DLA, cú pháp của câu lệnh tạo bảng như sau:

CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name
    [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
    [COMMENT table_comment]
    [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
    [ROW FORMAT row_format]
    [STORE AS file_format]
        | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
    LOCATION oss_path

LOCATION có thể được đặt thành chính tệp dữ liệu hoặc vào thư mục chứa tệp dữ liệu.

Nếu LOCATION được đặt thành tệp dữ liệu

Khi tạo một bảng, bạn có thể liên kết trực tiếp bảng với tệp dữ liệu. Trong trường hợp này, LOCATION phải được đặt thành đường dẫn tuyệt đối của tệp dữ liệu trong cá thể OSS.

Ví dụ:

CREATE EXTERNAL TABLE loc_file_csv(
    N_NATIONKEY INT,
    N_NAME STRING,
    N_REGIONKEY INT,
    N_COMMENT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv';

Nếu LOCATION được đặt thành một thư mục

Nếu LOCATION được đặt thành một thư mục trong cá thể OSS, tất cả các tệp trong thư mục này là các tệp dữ liệu của bảng.

Khi tạo một bảng, bạn có thể thiết lập recursive.directories để xác định xem có đi qua tất cả các tệp dữ liệu trong thư mục này hay không. Nếu recursive.directories được đặt thành giá trị mặc định hoặc không được chỉ định rõ ràng, DLA sẽ hiểu rằng recursive.directoriessai, nghĩa là thư mục không được duyệt qua.

Ví dụ, cấu trúc thư mục trong cá thể OSS như sau:

2018-07-05 11:16:11 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv
2018-07-05 11:15:57 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv
2018-07-05 11:16:17 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv

Câu lệnh tạo bảng như sau:

CREATE EXTERNAL TABLE loc_file_csv(
    N_NATIONKEY INT,
    N_NAME STRING,
    N_REGIONKEY INT,
    N_COMMENT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
'oss://my-bucket/datasets/test/test_create/create_table/csv'
TBLPROPERTIES ('recursive.directories' = 'false');

Nếu recursive.directories được đặt thành false, tệp dữ liệu của bảng này là tệp nation.csv bên dưới LOCATION:

oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv

Câu lệnh tạo bảng như sau:

CREATE EXTERNAL TABLE loc_file_csv(
    N_NATIONKEY INT,
    N_NAME STRING,
    N_REGIONKEY INT,
    N_COMMENT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
'oss://my-bucket/datasets/test/test_create/create_table/csv'
TBLPROPERTIES ('recursive.directories' = 'true');

Nếu recursive.directories được đặt thành true, các tệp dữ liệu của bảng này là tất cả các tệp .csv trong LOCATION và tất cả các thư mục con của nó:

oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv
oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv
oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv

Ghi chú bổ sung

  1. Nếu LOCATION là một thư mục, DLA xác định theo mặc định định dạng của tất cả các tệp dữ liệu trong thư mục này giống nhau và phân tích tệp dựa trên SERDE được chỉ định trong câu lệnh tạo bảng. Nếu định dạng của các tệp dữ liệu trong thư mục này là khác nhau, DLA gặp phải một lỗi phân tích cú pháp. Do đó, dữ liệu trong bảng không chính xác và kết quả truy vấn bị ảnh hưởng. Ví dụ, nếu STORED AS TEXTFILE được xác định trong câu lệnh tạo bảng, nhưng cả tệp .csv và .orc đều có sẵn trong thư mục, không có lỗi nào được báo cáo trong khi tạo bảng và truy vấn. Tuy nhiên, bạn có thể thấy dữ liệu có các ký tự bị cắt xén hoặc dữ liệu không chính xác khi chạy câu lệnh SELECT.
  2. Hiện tại, DLA không hỗ trợ tệp .csv có tiêu đề. Nếu dòng đầu tiên của tệp là tiêu đề, bạn phải xử lý dữ liệu theo cách thủ công. Nếu không, DLA sẽ xác định tiêu đề dưới dạng bản ghi dữ liệu.

Chu Thanh Hòa, Lâm Thị Nguyệt