Сначала давайте посмотрим на словарь last_exception -param:
SELECT *
FROM system.dictionaries
FORMAT Vertical
/*
..
last_exception: Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected , before: MA-L,002272,American Micro-Fuel Device Corp.,2181 Buchanan Loop Ferndale WA US 98248 \r\nMA-L,00D0EF,IGT,9295 PROTOTYPE DRIVE RENO NV US 89511 \r\nMA-L,086195,Rockw: (at row 1)
Row 1:
Column 0, name: assignment, type: UInt64, ERROR: text "MA-L,00227" is not like UInt64
..
*/
Причина проблемы в неправильном выборе макета: FLAT -layout ожидает цифра c первичный ключ с типом UInt64 вместо String.
Необходимо использовать составной ключ , поддерживающий строковый тип и связанный COMPLEX_KEY_HASHED -layout.
CREATE DICTIONARY TestDict
(
registry String DEFAULT '',
assignment String DEFAULT '',
name String DEFAULT '',
address String DEFAULT ''
)
PRIMARY KEY registry, assignment, name
SOURCE(HTTP(URL 'http://standards-oui.ieee.org/oui/oui.csv' FORMAT CSVWithNames))
LIFETIME(MIN 0 MAX 300)
LAYOUT(COMPLEX_KEY_HASHED())
Учитывать этот первичный ключ состоит из трех столбцов (реестр, назначение, имя) для уникальной идентификации каждой строки.
SELECT count()
FROM default.TestDict
/* result
┌─count()─┐
│ 27742 │
└─────────┘
*/