Метка времени Первичный ключ Куду

Я пытаюсь загрузить данные в таблицу Kudu через конверт. Одним из столбцов первичного ключа является отметка времени. DDL: СОЗДАТЬ ТАБЛИЦУ BAL ( client_id int bal_id int, метка времени_ фактического времени, prsn_id int, двойник bal_amount, строка prsn_name, КЛЮЧ ПЕРВИЧНОГО (client_id, bal_id,ffective_time)) PARTITION BY HASH(client_id) PARTITIONS 8 СОХРАНЕНЫ КАК KUDU;

Но это выдает ошибку Java.lang.illelegalArgumentException

Поэтому мой вопрос прост - столбец метки времени может быть частью первичного ключа или нет?

1 ответ

Да, это совершенно нормально, чтобы включить временную метку как часть первичного ключа. Пожалуйста, найдите код:

use ${var:db_name};
CREATE TABLE test (
  table_name STRING NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
  table_id BIGINT NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
  last_read_timestamp TIMESTAMP NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
  window STRING NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
  ext_gen_timestamp timestamp NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
  extract_date timestamp NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
  manual_rerun STRING NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
  PRIMARY KEY (table_name, table_id, last_read_timestamp)
)
STORED AS KUDU;

*

Да, отметка времени может быть частью первичного ключа.

Я создал таблицу:

CREATE TABLE BAL ( client_id int, 
            bal_id int,
            effective_time timestamp,
            prsn_id int,
            bal_amount double,
            prsn_name string,
            PRIMARY KEY ( client_id, bal_id, effective_time))
partition by hash(client_id) partitions 8 
stored as KUDU 
TBLPROPERTIES ( 
'kudu.master_addresses' = '127.0.0.1' ,
'kudu.num_tablet_replicas' = '1'
);

Таблица создана успешно.

Чтобы проверить подробную информацию о таблице: describe formatted bal;

Оператор SHOW CREATE TABLE всегда представляет спецификацию PRIMARY KEY как отдельный элемент в списке столбцов:

show create table bal;

выход

    Query: show create table bal
+------------------------------------------------------------------------------------------------------------------------------+
| result                                                                                                                       |
+------------------------------------------------------------------------------------------------------------------------------+
| CREATE TABLE default.bal (                                                                                                   |
|   client_id INT NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,                                             |
|   bal_id INT NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,                                                |
|   effective_time TIMESTAMP NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,                                  |
|   prsn_id INT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,                                                   |
|   bal_amount DOUBLE NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,                                             |
|   prsn_name STRING NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,                                              |
|   PRIMARY KEY (client_id, bal_id, effective_time)                                                                          |
| )                                                                                                                            |
| PARTITION BY HASH (client_id) PARTITIONS 8                                                                                   |
| STORED AS KUDU                                                                                                               |
| TBLPROPERTIES ('kudu.master_addresses'='127.0.0.1', 'kudu.num_tablet_replicas'='1', 'kudu.table_name'='impala::default.BAL') |
+------------------------------------------------------------------------------------------------------------------------------+
Fetched 1 row(s) in 0.11s

Выходные данные DESCRIBE показывают, как сообщается о кодировке после создания таблицы, показывают, какой столбец назначен в качестве первичного ключа и что пропуск кодирования (в данном случае для столбца ID) аналогичен указанию DEFAULT_ENCODING.

describe bal;

Query: describe bal
+----------------+-----------+---------+-------------+----------+---------------+---------------+---------------------+------------+
| name           | type      | comment | primary_key | nullable | default_value | encoding      | compression         | block_size |
+----------------+-----------+---------+-------------+----------+---------------+---------------+---------------------+------------+
| client_id      | int       |         | true        | false    |               | AUTO_ENCODING | DEFAULT_COMPRESSION | 0          |
| bal_id         | int       |         | true        | false    |               | AUTO_ENCODING | DEFAULT_COMPRESSION | 0          |
| effective_time | timestamp |         | true        | false    |               | AUTO_ENCODING | DEFAULT_COMPRESSION | 0          |
| prsn_id        | int       |         | false       | true     |               | AUTO_ENCODING | DEFAULT_COMPRESSION | 0          |
| bal_amount     | double    |         | false       | true     |               | AUTO_ENCODING | DEFAULT_COMPRESSION | 0          |
| prsn_name      | string    |         | false       | true     |               | AUTO_ENCODING | DEFAULT_COMPRESSION | 0          |
+----------------+-----------+---------+-------------+----------+---------------+---------------+---------------------+------------+
Fetched 6 row(s) in 0.11s
Другие вопросы по тегам