Chuyển đến nội dung chính

CREATE TABLE trong Databricks: Hướng dẫn đầy đủ về xây dựng và quản lý bảng

Khám phá cách tạo bảng trong Databricks bằng lệnh CREATE TABLE. Tìm hiểu các phương pháp cho từng kịch bản, bao gồm cách tạo bảng từ dữ liệu hiện có và cách CREATE TABLE AS SELECT.
· 10 phút đọc

Khám phá cùng AI

Các bảng Databricks là thành phần cốt lõi của nền tảng Databricks Lakehouse, được thiết kế để xử lý lưu trữ và xử lý dữ liệu quy mô lớn. Những bảng này cho phép cộng tác giữa các nhóm bằng cách hợp nhất dữ liệu có cấu trúc và phi cấu trúc, đồng thời hỗ trợ các tác vụ phân tích.

Trong bài viết này, tôi sẽ hướng dẫn bạn các kỹ thuật khác nhau để tạo bảng trong Databricks bằng lệnh CREATE TABLE với một số biến thể cú pháp nhằm đáp ứng các trường hợp sử dụng khác nhau. Tôi cũng sẽ đưa ra một số mẹo về thực tiễn tốt nhất khi xây dựng và quản lý bảng trong Databricks để đạt hiệu quả và độ tin cậy cao.

Khi bắt đầu, tôi rất khuyến nghị bạn xem bài viết blog Cách học Databricks: Hướng dẫn cho người mới bắt đầu về Nền tảng Dữ liệu Hợp nhất của DataCamp để hiểu các tính năng cốt lõi và ứng dụng của Databricks, đồng thời cung cấp lộ trình có cấu trúc để bạn bắt đầu học. Tôi cũng khuyến nghị học khóa Introduction to Databricks của chúng tôi. Ngay cả khi bạn đã có kinh nghiệm với SQL, bạn sẽ thấy mọi thứ có thể trông khác trên nền tảng Databricks Lakehouse. Các bài tập tương tác trong khóa học sẽ hướng dẫn bạn qua các truy vấn SQL cũng như các tính năng của nền tảng và kết nối tới hệ thống bên ngoài.

Giới thiệu về bảng Databricks

Trước hết, cần nói rằng bảng Databricks là các tập dữ liệu có cấu trúc giúp tổ chức và truy cập dữ liệu trong môi trường Databricks Lakehouse. Có hai loại:

  • Managed Tables: Các bảng này được Databricks quản lý toàn diện, bao gồm cả lưu trữ và metadata. Khi tạo một bảng managed, Databricks sẽ xử lý các tệp dữ liệu bên dưới, và nếu bảng bị xóa, dữ liệu tương ứng cũng bị xóa. 
  • External Tables: Các bảng external tham chiếu dữ liệu nằm ngoài Databricks, thường là trong các hệ thống lưu trữ đám mây như AWS S3 hoặc Azure Blob Storage. Databricks quản lý metadata cho các bảng này, nhưng dữ liệu thực tế vẫn giữ nguyên ngay cả khi bảng bị drop. Chúng còn được gọi là bảng unmanaged.

Các bảng trong Databricks thường mặc định là Delta Lake nhờ các tính năng nâng cao và tối ưu hóa của nó. Delta Lake cung cấp giao dịch ACID, khả năng mở rộng, cải thiện hiệu năng như tối ưu hóa cache và indexing, và xử lý dữ liệu batch và streaming hợp nhất.

Lưu ý, những phiên bản đầu của Azure Databricks dùng các bảng “định dạng Hive” cũ, nay đã được thay thế bởi bảng Delta hiện đại. Nhìn chung, các bảng Delta hiện đại vượt trội so với bảng Hive cũ về độ tin cậy và hiệu năng, khiến chúng trở thành lựa chọn mặc định cho các quy trình Databricks.

Dưới đây là phần tóm tắt mà tôi nghĩ sẽ giúp bạn thấy sự khác biệt giữa hai loại:

Tính năngBảng định dạng HiveBảng Delta
Định dạng dữ liệuApache Hive (CSV, Parquet, ORC, v.v.)Delta Lake (dựa trên Parquet kèm metadata)
Giao dịchKhông hỗ trợ ACID (nhất quán dần)Giao dịch ACID đầy đủ
Quản lý schemaRàng buộc hạn chếRàng buộc schema nghiêm ngặt
Tối ưu hiệu năngCần tinh chỉnh thủ côngTối ưu tích hợp sẵn (caching, compaction)
Time travelKhông hỗ trợ truy vấn lịch sử tích hợpHỗ trợ time travel để truy vấn phiên bản dữ liệu trước đó
Truy cập đồng thờiDễ xung đột khi cập nhật hoặc xóaXử lý hiệu quả các thao tác đồng thời

Các biến thể cú pháp CREATE TABLE

Lệnh CREATE TABLE trong Databricks hỗ trợ nhiều biến thể để đáp ứng các trường hợp khác nhau. Mỗi biến thể có mục đích riêng, với các tùy chọn nhắm mục tiêu như vị trí tệp, cloning và quản lý metadata. Nếu bạn cần ôn lại kiến thức về Databricks SQL, tôi khuyến nghị đọc hướng dẫn Databricks SQL của chúng tôi để học, trong số những nội dung khác, cách sử dụng Notebook trong một Databricks SQL warehouse.

 Dưới đây là các kiểu cú pháp chính kèm ví dụ và giải thích.

CREATE TABLE [USING]

Cú pháp này tạo một bảng mới với schema và định dạng dữ liệu xác định. Truy vấn sau tạo một bảng tên sales_data bằng cách đọc dữ liệu từ các tệp Parquet được lưu ở một vị trí cụ thể.

-- Create a table from files in a specific format
CREATE TABLE sales_data
USING PARQUET
LOCATION '/mnt/data/sales';

CREATE TABLE (định dạng Hive)

Cú pháp cũ này tương tự lệnh SQL chuẩn CREATE TABLE, dùng khi định nghĩa một bảng với metadata do Databricks quản lý mà không cần tham chiếu tệp external. Truy vấn dưới đây tạo một bảng kiểu Hive tên hive_table với schema xác định trước và các thuộc tính metadata bổ sung.

-- Hive-style table creation with schema definition
CREATE TABLE hive_table (
    id INT,
    name STRING
)
COMMENT 'Hive format example'
TBLPROPERTIES ('created_by' = 'databricks');

Trong truy vấn trên, mệnh đề COMMENT thêm metadata mô tả, còn TBLPROPERTIES lưu các thuộc tính tùy chỉnh về bảng.

CREATE TABLE LIKE

Lệnh này tạo một bảng mới sử dụng schema và thuộc tính của một bảng hiện có. Bạn nên dùng cú pháp này khi muốn sao chép cấu trúc của một bảng mà không sao chép dữ liệu. Điều này hữu ích cho mục đích thử nghiệm hoặc phát triển.

-- Create a table with the same schema as another table
CREATE TABLE new_table LIKE existing_table;

CREATE TABLE CLONE

Cú pháp này cho phép bạn tạo một bảng mới bằng cách clone một bảng Delta Lake hiện có, dưới dạng deep hoặc shallow clone. Vì vậy, bạn nên dùng CREATE TABLE CLONE khi cần một bản sao độc lập dữ liệu và metadata (deep clone) hoặc chỉ metadata trong khi tham chiếu dữ liệu gốc (shallow clone). Hãy nghĩ đến trường hợp versioning hoặc tạo bản sao lưu.

Ví dụ sau minh họa các truy vấn tạo deep clone và shallow clone trong Databricks.

 -- Deep clone by default
CREATE TABLE cloned_table CLONE original_table;

-- Shallow clone
CREATE TABLE shallow_clone_table SHALLOW CLONE original_table;  

CREATE OR REPLACE TABLE

Lệnh kết hợp này thay thế một bảng hiện có bằng một bảng mới, giữ nguyên tên bảng, trong một thao tác. Bạn nên dùng cú pháp này khi muốn ghi đè hoàn toàn một bảng hiện có nhưng vẫn giữ tên. Điều này đặc biệt hữu ích để cập nhật cấu trúc hoặc dữ liệu của bảng mà không cần drop trước.

Truy vấn ví dụ dưới đây tạo hoặc thay thế bảng sales với schema mới.

-- Create or replace a sales table with a new schema
CREATE OR REPLACE TABLE sales (
    sale_id INT,
    amount FLOAT
)
USING DELTA
LOCATION '/mnt/delta/sales';

Có các mệnh đề liên quan khác bạn có thể dùng cùng cú pháp CREATE TABLE trong Databricks để quản lý bảng theo yêu cầu cụ thể. Sau đây là tóm tắt cách dùng cho từng mệnh đề. Tôi đã dùng một số nhưng không phải tất cả trong các ví dụ ở trên.

  • IF NOT EXISTS: Tránh lỗi bằng cách bỏ qua việc tạo bảng nếu bảng đã tồn tại.

  • USING: Chỉ định định dạng tệp (ví dụ: Delta, Parquet, CSV).

  • EXTERNAL: Khai báo bảng có dữ liệu nằm ngoài lưu trữ do Databricks quản lý.

  • PARTITIONED BY: Định nghĩa các phân vùng để tối ưu cho tập dữ liệu lớn.

  • LOCATION: Trỏ đến thư mục chứa dữ liệu của bảng.

  • TBLPROPERTIES: Thêm metadata cho cấu hình và tối ưu tùy chỉnh của bảng.

Minh họa từng bước

Trong phần này, tôi sẽ minh họa các cách khác nhau để tạo và quản lý bảng trong Databricks, với ví dụ ngắn gọn và giải thích các mệnh đề chính. Tôi khuyến nghị xem hướng dẫn Databricks Tutorial: 7 khái niệm cần biết cho mọi chuyên gia dữ liệu để học cách chạy lệnh SQL trên nền tảng Databricks.

Cách tạo một bảng rỗng

Để tạo một bảng Delta rỗng, hãy định nghĩa schema của bảng với tên cột và kiểu dữ liệu. Dùng mệnh đề USING DELTA để xác định định dạng bảng và COMMENT để thêm metadata mô tả.

Truy vấn này tạo một bảng Delta rỗng tên employees với schema xác định trước, gồm các cột id, name, department và hire_date. 

-- Create an empty Delta table with a defined schema
CREATE TABLE employees (
    id BIGINT,
    name STRING,
    department STRING,
    hire_date DATE
)
USING DELTA
COMMENT 'Table to store employee information';

Cách tạo bảng từ dữ liệu hiện có

Để tạo bảng từ dữ liệu hiện có, liên kết bảng tới các tệp dữ liệu external theo định dạng như CSV, Parquet hoặc JSON. Bạn có thể dùng mệnh đề LOCATION để liên kết bảng với đường dẫn tệp và mệnh đề USING để chỉ định định dạng dữ liệu.

Ví dụ, truy vấn sau tạo một bảng tên sales_data bằng cách tham chiếu các tệp Parquet được lưu tại /mnt/data/sales_data/.

-- Create a table from Parquet files in a specified location
CREATE TABLE sales_data
USING PARQUET
LOCATION '/mnt/data/sales_data/';

Cách tạo bảng dưới dạng truy vấn chọn (CTAS)

Bạn cũng có thể tạo bảng dưới dạng chọn bằng cách thực thi một truy vấn và lưu kết quả. Trong kịch bản này, mệnh đề AS SELECT sẽ nạp dữ liệu cho bảng từ kết quả truy vấn.

Ví dụ, truy vấn dưới đây tạo một bảng mới tên high_value_sales bằng cách chọn và biến đổi dữ liệu từ bảng sales_data hiện có. Truy vấn lọc các hàng có total_amount lớn hơn 1000, chỉ giữ các cột sale_id, customer_id và total_amount. 

-- Create a table by selecting and transforming data from another table
CREATE TABLE high_value_sales AS
SELECT
    sale_id,
    customer_id,
    total_amount
FROM sales_data
WHERE total_amount > 1000;

Cách tạo bảng external

Tạo một bảng external liên quan đến việc tham chiếu dữ liệu được lưu trữ bên ngoài vùng lưu trữ do Databricks quản lý. Bạn nên dùng mệnh đề LOCATION để chỉ định vị trí dữ liệu external.

Truy vấn dưới đây tạo một bảng Delta external tên external_table bằng cách tham chiếu dữ liệu lưu tại /mnt/external_storage/external_table/.

-- Create an external table referencing data outside Databricks storage
CREATE TABLE external_table
USING DELTA
LOCATION '/mnt/external_storage/external_table/';

Cách tạo bảng LIKE

Để tạo bảng LIKE, hãy nhân bản schema của một bảng hiện có mà không sao chép dữ liệu. Trong ví dụ dưới đây, truy vấn tạo một bảng mới tên sales_backup với cùng schema như bảng sales hiện có.

-- Create a new sales table with the same schema as an existing table
CREATE TABLE sales_backup LIKE sales;

Cách tạo TABLE CLONE

Bạn có thể tạo một bản sao bảng bằng cách dùng mệnh đề CLONE để tạo bản sao shallow hoặc deep của một bảng Delta nhằm phục vụ sao lưu hoặc thử nghiệm.

Trong ví dụ sau, truy vấn tạo một bảng mới sales_shallow_clone, chỉ sao chép metadata (schema và thuộc tính bảng).

-- Shallow clone: Copies only metadata (references original data)
CREATE TABLE sales_shallow_clone CLONE sales_data;

Ví dụ dưới đây tạo một bảng mới sales_deep_clone, nhưng sao chép cả metadata và dữ liệu thực tế.

-- Deep clone: Copies both metadata and actual data
CREATE TABLE sales_deep_clone CLONE sales_data DEEP;

Cách tạo bảng tạm (temp table)

Sử dụng mệnh đề TEMPORARY khi tạo bảng tạm để đảm bảo bảng chỉ tồn tại trong phiên làm việc.

Truy vấn dưới đây tạo một bảng tạm tên temp_table chỉ tồn tại trong phiên hiện tại. Nó chọn id, name và sales_amount từ sales_data, lọc những hàng có region = 'US'.

-- Create a temporary table that exists only in the session
CREATE TEMPORARY TABLE temp_table AS
SELECT
    id,
    name,
    sales_amount
FROM sales_data
WHERE region = 'US';

Cách thay thế một bảng

Bạn có thể dùng mệnh đề CREATE OR REPLACE để thay thế định nghĩa và nội dung của bảng. Truy vấn dưới đây thay thế bảng updated_table hiện có bằng schema và dữ liệu mới. Nó định nghĩa bảng với ba cột (id, name, total_sales).

-- Replace an existing table with a new schema or data
CREATE OR REPLACE TABLE updated_table (
    id BIGINT,
    name STRING,
    total_sales DOUBLE
)
USING DELTA
LOCATION '/mnt/delta/updated_table/';

Chủ đề nâng cao

Trong phần này, tôi sẽ khám phá các tính năng bảng Databricks nâng cao giúp tăng cường chức năng, hiệu năng và bảo mật.

Cột sinh tự động và cột identity

Databricks hỗ trợ các cột identity, tự động tạo giá trị duy nhất cho mỗi hàng mới. Tính năng này hữu ích để tạo khóa thay thế trong kho dữ liệu.

Truy vấn dưới đây tạo bảng employees với ba cột: id, name và department. Cột id là cột identity tự tăng với mỗi hàng mới.

-- Identity column: auto-incremented value
CREATE TABLE employees (
    id BIGINT GENERATED ALWAYS AS IDENTITY, -- Auto-incremented column
    name STRING,
    department STRING
);

Truy vấn khác này tạo bảng sales với ba cột: sale_id, sale_date và sale_year. Cột sale_year là cột sinh tự động và được tính dựa trên cột sale_date bằng hàm YEAR(sale_date).

-- Generated column: derived from other columns
CREATE TABLE sales (
    sale_id BIGINT,
    sale_date DATE,
    sale_year INT GENERATED ALWAYS AS (YEAR(sale_date)) -- Derived column
);

Partitioning và clustering

Partitioning chia dữ liệu thành các phần nhỏ hơn, cải thiện hiệu năng truy vấn, trong khi clustering tổ chức dữ liệu trong từng phân vùng để đọc nhanh hơn.

Ví dụ, truy vấn dưới đây tạo một bảng được phân vùng, trong đó dữ liệu được chia theo cột region, giúp cải thiện hiệu năng truy vấn khi lọc theo vùng.

-- Partitioned table
CREATE TABLE partitioned_table (
    id BIGINT,
    region STRING,
    sales_amount DOUBLE
)
USING DELTA
PARTITIONED BY (region); -- Querying by region will be faster

Truy vấn dưới đây tối ưu bảng đã phân vùng bằng cách clustering dữ liệu trong mỗi phân vùng dựa trên cột sales_amount. Nó giúp các truy vấn trên sales_amount nhanh hơn bằng cách cải thiện bố cục dữ liệu để đọc hiệu quả. Mệnh đề ZORDER BY hoạt động trong phạm vi từng phân vùng để cải thiện hiệu năng đọc bằng cách gom cụm dữ liệu trong phân vùng, không phải giữa các phân vùng.

-- Clustered table
OPTIMIZE partitioned_table
ZORDER BY (sales_amount); -- Clusters data within partitions for efficient reads

Che giấu cột và lọc theo hàng

Che giấu cột và bộ lọc theo hàng hạn chế khả năng hiển thị dữ liệu dựa trên vai trò người dùng hoặc điều kiện, bảo vệ thông tin nhạy cảm.

Ví dụ, truy vấn dưới đây tạo một masked view tên masked_table dựa trên bảng employees. Cột salary được làm mờ (thay bằng REDACTED) cho tất cả người dùng ngoại trừ những người có vai trò manager. Mệnh đề CASE đảm bảo chỉ quản lý mới nhìn thấy mức lương thực tế, còn người khác thấy dữ liệu đã che giấu

-- Column masking: Redact sensitive data
CREATE MASKED VIEW masked_table AS
SELECT
    id,
    name,
    CASE
        WHEN current_user() = 'manager' THEN salary
        ELSE 'REDACTED'
    END AS salary
FROM employees;

Tương tự, truy vấn dưới đây dùng bộ lọc theo hàng để tạo hoặc thay thế một view tên filtered_table dựa trên bảng sales. View này lọc các hàng chỉ bao gồm dữ liệu nơi region = 'US', giới hạn truy cập chỉ còn dữ liệu bán hàng tại Mỹ.

-- Row filters: Fine-grained access control
CREATE OR REPLACE VIEW filtered_table AS
SELECT *
FROM sales
WHERE region = 'US'; -- Limit data visibility to a specific region

Tiến hóa schema

Databricks hỗ trợ tiến hóa schema thông qua CREATE OR REPLACE TABLE và các thay đổi bảng. Bạn nên dùng câu lệnh CREATE OR REPLACE TABLE để ghi đè schema và dữ liệu, và ALTER TABLE để chỉnh sửa schema dần dần mà không ảnh hưởng dữ liệu.

Truy vấn dưới đây thay thế bảng employees hiện có bằng schema mới, thêm cột hire_date mới trong khi vẫn lưu dữ liệu ở định dạng Delta.

-- Schema evolution with CREATE OR REPLACE TABLE
CREATE OR REPLACE TABLE employees (
    id BIGINT,
    name STRING,
    department STRING,
    hire_date DATE -- New column added
)
USING DELTA;

Truy vấn khác này chỉnh sửa bảng employees bằng cách thêm cột salary mới vào schema hiện có.

-- Altering a table schema
ALTER TABLE employees ADD COLUMNS (salary DOUBLE);

Tinh chỉnh hiệu năng

Để tối ưu hiệu năng cho các bảng quy mô lớn, bạn có thể tận dụng nhiều thuộc tính bảng và kỹ thuật như tự động tối ưu và Z-ordering.

Trong ví dụ sau, truy vấn bật tự động tối ưu trên delta_table bằng cách thiết lập các thuộc tính để tự động nén file nhỏ và gộp file trong quá trình ghi, cải thiện hiệu quả lưu trữ.

-- Enable automatic optimizations
ALTER TABLE delta_table
SET TBLPROPERTIES (
    'delta.autoOptimize.optimizeWrite' = 'true', -- Automatically compact small files
    'delta.autoOptimize.autoCompact' = 'true'   -- Automatically merge files
);

Tương tự, truy vấn dưới đây tối ưu delta_table bằng cách gom cụm dữ liệu dựa trên region và sales_date để tăng hiệu năng truy vấn, đặc biệt cho các bộ lọc trên các cột này.

-- Perform clustering for faster query performance
OPTIMIZE delta_table
ZORDER BY (region, sales_date); -- Improves query efficiency for frequent filters

Thực tiễn tốt và lưu ý

Dưới đây là một số điều cần cân nhắc khi tạo bảng trong Databricks để bạn làm đúng ngay từ đầu:

  • Quy ước đặt tên bảng: Luôn dùng tên rõ ràng và nhất quán để tăng khả năng tìm kiếm và giảm lỗi. Tránh ký tự đặc biệt hoặc tên quá dài để ngăn vấn đề tương thích.
  • Bảo mật và phân quyền: Sử dụng Unity Catalog để kiểm soát truy cập tập trung cho mọi tài sản dữ liệu. Dùng Access Control Lists (ACL) để giới hạn ai có thể xem hoặc chỉnh sửa dữ liệu. Đồng thời, che giấu dữ liệu nhạy cảm bằng masking theo cột hoặc lọc theo hàng.
  • Sao lưu và khôi phục: Tận dụng lịch sử phiên bản của Delta Lake để khôi phục dễ dàng và time travel. Thường xuyên theo dõi và quản lý thời hạn lưu trữ các phiên bản lịch sử để cân bằng chi phí và nhu cầu khôi phục.
  • Managed so với external tables: Cũng rất quan trọng để hiểu bảng managed và bảng external. Với bảng managed, Databricks xử lý cả metadata và dữ liệu. Điều này lý tưởng khi bạn muốn kiểm soát toàn bộ vòng đời dữ liệu. Tuy nhiên, với bảng external, dữ liệu tham chiếu được lưu bên ngoài Databricks. Điều này hữu ích để duy trì quyền kiểm soát dữ liệu có thể được chia sẻ trên các nền tảng hoặc hệ thống khác nhau.

Lỗi thường gặp và cách khắc phục

Sau khi đã thảo luận về thực tiễn tốt nhất để quản lý bảng trong Databricks, tôi sẽ đề cập đến các vấn đề thường gặp với bảng Databricks, thông báo lỗi tiêu biểu và cách giải quyết.

Lỗi vị trí không rỗng khi dùng CREATE so với CREATE OR REPLACE

Khi dùng CREATE TABLE với vị trí xác định (mệnh đề LOCATION), nếu thư mục không rỗng, bạn có thể gặp lỗi như:

Error: Cannot create table because the location is not empty.

Lỗi này xảy ra vì lệnh CREATE TABLE yêu cầu thư mục trống cho vị trí đã chỉ định, nhưng các tệp hoặc metadata hiện có xung đột với yêu cầu này. 

Để khắc phục, hãy dùng câu lệnh CREATE OR REPLACE TABLE để ghi đè dữ liệu và metadata hiện có. Hoặc tự dọn thư mục trước khi dùng CREATE TABLE.

CREATE OR REPLACE TABLE delta_table
USING DELTA
LOCATION '/mnt/data/delta_table'; -- Overwrites table and files

Không khớp schema hoặc vấn đề với một số kiểu dữ liệu

Việc chèn hoặc truy vấn dữ liệu dẫn đến lỗi không khớp schema như:

Error: Schema mismatch: Expected column type STRING, but found INT.

Lỗi có thể do không khớp giữa schema của bảng và kiểu dữ liệu đầu vào. Ngoài ra, các chuyển đổi kiểu dữ liệu không được hỗ trợ hoặc mơ hồ (ví dụ: kiểu lồng phức tạp) cũng có thể gây không khớp schema. Để khắc phục, hãy bắt buộc khớp schema bằng cách xác minh schema khi tạo bảng hoặc sử dụng ràng buộc schema trong các bảng Delta.

-- Enforce schema matching during table creation
CREATE TABLE schema_table (
    id INT,
    name STRING
)
USING DELTA
TBLPROPERTIES ('delta.schema.enforce' = 'true'); -- Enforces strict schema

Bên cạnh đó, bạn nên cho phép tiến hóa schema khi thêm cột mới hoặc thay đổi kiểu dữ liệu.

ALTER TABLE schema_table ADD COLUMNS (new_column DOUBLE);

Sử dụng ép kiểu tường minh khi chèn dữ liệu cũng sẽ giúp xử lý loại lỗi này.

INSERT INTO schema_table SELECT CAST(id AS INT), CAST(name AS STRING) FROM source_table;

Giới hạn giao dịch đồng thời với cột identity

Khi sử dụng cột identity, bạn có thể gặp vấn đề liên quan đến giao dịch đồng thời, chẳng hạn như:

Error: Concurrent transactions detected on identity column table

Các cột identity có trạng thái và có thể gặp xung đột khi nhiều giao dịch đồng thời cố gắng chèn dữ liệu. Để khắc phục, hãy dùng khóa thay thế để thay cột identity bằng các khóa thay thế có tính quyết định, được tạo bằng các hàm như uuid() hoặc monotonically_increasing_id().

CREATE TABLE better_table AS
SELECT
    monotonically_increasing_id() AS id, -- Replaces identity column
    name, department
FROM source_data;

Bạn cũng có thể dùng MERGE của Delta Lake cho các quy trình chèn và cập nhật phức tạp mà không cần dựa vào cột identity.

MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;

Kết luận

Trong Databricks, lệnh CREATE TABLE là công cụ linh hoạt để định nghĩa cấu trúc dữ liệu, liên kết tới dữ liệu external và tạo ra tập dữ liệu mới thông qua truy vấn. Việc hiểu các cú pháp khác nhau để tạo và quản lý bảng trong Databricks theo nhu cầu cụ thể của bạn là rất quan trọng. Như bạn đã thấy, có một vài phương pháp tạo bảng để lựa chọn.

Nếu bạn muốn khám phá các khái niệm nền tảng của Databricks, tôi rất khuyến nghị học khóa Introduction to Databricks của DataCamp để tìm hiểu về Databricks như một giải pháp kho dữ liệu cho Business Intelligence (BI). Tôi cũng khuyến nghị xem bài viết Chứng chỉ Databricks năm 2025 của chúng tôi để biết cách đạt được chứng chỉ Databricks, khám phá lợi ích nghề nghiệp, và lựa chọn chứng chỉ phù hợp với mục tiêu của bạn.

Allan Ouko

Tác giả

Allan Ouko

Biên tập viên kỹ thuật về Khoa học dữ liệu với kinh nghiệm thực tế trong phân tích dữ liệu, trí tuệ doanh nghiệp và khoa học dữ liệu. Tôi viết nội dung thực tiễn, tập trung vào ngành về SQL, Python, Power BI, Databricks và kỹ thuật dữ liệu, dựa trên công việc phân tích trong thế giới thực. Bài viết của tôi kết nối chiều sâu kỹ thuật với tác động kinh doanh, giúp các chuyên gia chuyển đổi dữ liệu thành những quyết định vững chắc.

Câu hỏi thường gặp về Databricks CREATE TABLE

Mục đích của lệnh CREATE TABLE trong Databricks là gì?

Lệnh CREATE TABLE được dùng để định nghĩa một bảng mới trong Databricks, cho phép người dùng chỉ định schema của bảng, định dạng dữ liệu và vị trí lưu trữ.

Sự khác nhau giữa bảng managed và bảng external là gì?

Bảng managed lưu cả metadata và dữ liệu trong Databricks, trong khi bảng external chỉ lưu metadata, còn dữ liệu nằm ở vị trí external.

Bảng external có giống bảng unmanaged không?

Đúng vậy, bảng external và bảng unmanaged đề cập đến cùng một khái niệm trong Databricks. Chúng lưu metadata trong Databricks nhưng giữ dữ liệu thực tế ở vị trí external, cho phép bạn quản lý vòng đời dữ liệu độc lập.

Shallow clone và deep clone khác nhau thế nào?

Shallow clone chỉ sao chép metadata, trong khi deep clone sao chép cả dữ liệu và metadata.

Bảng tạm (temporary tables) là gì?

Bảng tạm (temporary) chỉ tồn tại trong phiên làm việc hiện tại và sẽ tự động bị xóa sau khi phiên kết thúc.

Tiến hóa schema (schema evolution) trong Databricks là gì?

Tiến hóa schema cho phép bạn chỉnh sửa schema của bảng hiện có (ví dụ: thêm hoặc sửa cột) mà không cần tạo lại toàn bộ bảng, đặc biệt hữu ích với các bảng Delta.

Chủ đề

Liên quan