tôi muốn thêm khóa sắp xếp vào cột trong bảng nhưng bảng được tạo. vì vậy có bất kỳ lệnh nào mà chúng ta có thể thêm khoá sắp xếp vào cột (trường).Cách thêm phím sắp xếp vào cột bảng với lệnh thay đổi trong chuyển hướng aws
Xin cảm ơn trước.
tôi muốn thêm khóa sắp xếp vào cột trong bảng nhưng bảng được tạo. vì vậy có bất kỳ lệnh nào mà chúng ta có thể thêm khoá sắp xếp vào cột (trường).Cách thêm phím sắp xếp vào cột bảng với lệnh thay đổi trong chuyển hướng aws
Xin cảm ơn trước.
Hiện tại tôi nghĩ rằng điều đó là không thể (hy vọng điều đó sẽ thay đổi trong tương lai). Trong quá khứ khi tôi gặp phải tình huống như thế này, tôi đã tạo một cái bàn mới và sao chép dữ liệu từ cái cũ vào đó.
từ http://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html:
Thanh [COLUMN] column_name Thêm một cột với tên được chỉ định vào bảng. Bạn chỉ có thể thêm một cột trong mỗi câu lệnh ALTER TABLE.
Bạn không thể thêm cột là khóa phân phối (DISTKEY) hoặc khóa sắp xếp (SORTKEY) của bảng.
Bạn không thể sử dụng một TABLE ALTER ADD lệnh COLUMN để sửa đổi các bảng và cột sau thuộc tính:
UNIQUE
PRIMARY KEY
Tài liệu tham khảo (khoá ngoại)
SẮC
Độ dài tên cột tối đa là 127 ký tự; tên dài hơn được cắt ngắn thành 127 ký tự. Số cột tối đa bạn có thể xác định trong một bảng là 1.600.
Như Yaniv Kessler đã đề cập, bạn không thể thêm hoặc thay đổi khóa distkey và sắp xếp sau khi tạo bảng và bạn phải tạo lại bảng và sao chép tất cả dữ liệu vào bảng mới. Bạn có thể sử dụng định dạng SQL sau để tạo lại một bảng với thiết kế mới.
ALTER TABLE test_table RENAME TO old_test_table;
CREATE TABLE new_test_table([new table columns]);
INSERT INTO new_test_table (SELECT * FROM old_test_table);
ALTER TABLE new_test_table RENAME TO test_table;
DROP TABLE old_test_table;
Kinh nghiệm của tôi, SQL này được sử dụng không chỉ thay đổi distkey và sortkey, mà còn thiết lập loại mã hóa (nén).
Để thêm vào câu trả lời của Yaniv, cách lý tưởng để thực hiện việc này có thể là sử dụng lệnh CREATE TABLE AS. Bạn có thể chỉ định khóa và khóa phân loại một cách rõ ràng. I E.
CREATE TABLE test_table_with_dist
distkey(field)
sortkey(sortfield)
AS
select * from test_table
ví dụ khác:
http://docs.aws.amazon.com/redshift/latest/dg/r_CTAS_examples.html
EDIT
tôi đã nhận thấy rằng phương pháp này không bảo vệ mã hóa. Redshift chỉ tự động mã hóa trong một bản sao chép. Nếu đây là một bảng bền vững, bạn nên xác định lại bảng và chỉ định bảng mã.
create table test_table_with_dist(
field1 varchar encode row distkey
field2 timestam pencode delta sortkey);
insert into test_table select * from test_table;
Bạn có thể tìm ra mã hóa để sử dụng bằng cách chạy analyze compression test_table;
Tôi đi theo phương pháp này để thêm các cột sắp xếp để table_transactons bàn của tôi tiếp cận nhiều hơn hoặc ít hơn cùng của nó chỉ ít số lệnh.
1) thay đổi bảng table_transactions đổi tên thành table_transactions_backup; 2) tạo bảng table_transactions compound sortkey (key1, key2, key3, key4) như select * từ table_transactions_backup; 3) bảng thả table_transactions_backup;
Đây là câu trả lời hay nhất. Tôi có thể thêm rằng nó có thể an toàn hơn để làm việc đổi tên bảng sau khi hoàn thành thao tác. –
Điều này là khá muộn, nhưng tôi đang ở trong tình trạng tương tự và tôi đã làm một số đào để những gì hiệu suất cho loại hình hoạt động sẽ được, giả sử bảng lớn. Các tài liệu Redshift đề cập rằng INSERT INTO nên được sử dụng một cách thận trọng, ưu tiên các lệnh COPY hoặc CREATE TABLE AS. [Ví dụ về CTAS] (http://docs.aws.amazon.com/redshift/latest/dg/r_CTAS_examples.html) đề cập đến vấn đề này một cách rõ ràng. – paulsef11
Vấn đề với phương pháp này là nếu bạn có chế độ xem tùy thuộc vào bảng gốc, thì trình đơn thả của bạn sẽ không hoạt động. – Pasha