Есть ли в импорте данных Clickhouse параметр для игнорирования / замены данных, которые не соответствуют типу столбца назначения? - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь импортировать данные в Clickhouse. Дело в том, что есть много полей, заполненных данными типа "N / A", а они должны быть Float.

Есть ли параметр, указывающий, что если данные для вставки не соответствуют типу целевого столбца, Clickhouse следует просто игнорировать их или заменить на nan или null?

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Для предварительной обработки входных данных можно использовать стандартные Unix утилиты, например:

N / A -> Nan

cat data.csv | sed 's/N\/A/NaN/g' | clickhouse-client --query="INSERT INTO table_name FORMAT CSV"

N / A -> NULL

cat data.csv | sed 's/N\/A//g' | clickhouse-client --query="INSERT INTO table_name FORMAT CSV"
1 голос
/ 07 мая 2020
create table XYZ(K Int64, A Float64 default NaN, B Nullable(Float64)) Engine=Memory;
insert into XYZ(K) values(1);
insert into XYZ(K, A, B) values(2, NaN, Null);

SELECT * FROM XYZ

┌─K─┬───A─┬────B─┐
│ 1 │ nan │ ᴺᵁᴸᴸ │
│ 2 │ nan │ ᴺᵁᴸᴸ │
└───┴─────┴──────┘

echo -e "3,N/A,N/A\n4,0.5,0.5"
3,N/A,N/A
4,0.5,0.5

echo -e "3,N/A,N/A\n4,0.5,0.5"|clickhouse-client -q "insert into XYZ SELECT K, ifNull(toFloat64OrNull(A),NaN), toFloat64OrNull(B) FROM input('K Int64, A String, B String') FORMAT CSV";

SELECT * FROM XYZ

┌─K─┬───A─┬────B─┐
│ 3 │ nan │ ᴺᵁᴸᴸ │
│ 4 │ 0.5 │  0.5 │
└───┴─────┴──────┘

create table XYZ_null (K Int64, A String, B String) Engine=Null;
create materialized view XYZ_mv to XYZ as SELECT K, ifNull(toFloat64OrNull(A),NaN) A, toFloat64OrNull(B) B from XYZ_null

echo -e "5,N/A,N/A\n6,0.5,0.5"|clickhouse-client -q "insert into XYZ_null FORMAT CSV";

SELECT * FROM XYZ

┌─K─┬───A─┬────B─┐
│ 5 │ nan │ ᴺᵁᴸᴸ │
│ 6 │ 0.5 │  0.5 │
└───┴─────┴──────┘
...