Project: ClickHouse (App Definition and Development / Database)
File: dictionary.md

slug: /en/sql-reference/statements/create/dictionary sidebar_position: 38 sidebar_label: DICTIONARY title: "CREATE DICTIONARY" Creates a new with given , , and . ``` sql CREATE [OR REPLACE] DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster] ( key1 type1 [DEFAULT|EXPRESSION expr1] [ISOBJECTID], key2 type2 [DEFAULT|EXPRESSION expr2], attr1 type2 [DEFAULT|EXPRESSION expr3] [HIERARCHICAL|INJECTIVE], attr2 type2 [DEFAULT|EXPRESSION expr4] [HIERARCHICAL|INJECTIVE] ) PRIMARY KEY key1, key2 SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN])) LAYOUT(LAYOUTNAME([paramname param_value])) LIFETIME({MIN minval MAX maxval | max_val}) SETTINGS(settingname = settingvalue, settingname = settingvalue, ...) COMMENT 'Comment' ``` The dictionary structure consists of attributes. Dictionary attributes are specified similarly to table columns. The only required attribute property is its type, all other properties may have default values. `ON CLUSTER` clause allows creating dictionary on a cluster, see . Depending on dictionary one or more attributes can be specified as dictionary keys. The source for a dictionary can be a: table in the current ClickHouse service table in a remote ClickHouse service file available by HTTP(S) another database Input table `source_table`: ``` text idvalue 1 First 2 Second ``` Creating the dictionary: ``` sql CREATE DICTIONARY idvaluedictionary ( id UInt64, value String ) PRIMARY KEY id SOURCE(CLICKHOUSE(TABLE 'source_table')) LAYOUT(FLAT()) LIFETIME(MIN 0 MAX 1000) ``` Output the dictionary: ``` sql SHOW CREATE DICTIONARY idvaluedictionary; ``` ```response CREATE DICTIONARY default.idvaluedictionary ( `id` UInt64, `value` String ) PRIMARY KEY id SOURCE(CLICKHOUSE(TABLE 'source_table')) LIFETIME(MIN 0 MAX 1000) LAYOUT(FLAT()) ``` :::note When using the SQL console in , you must specify a user (`default` or any other user with the role `default_role`) and password when creating a dictionary. :::note ```sql CREATE USER IF NOT EXISTS clickhouse_admin IDENTIFIED WITH sha256_password BY 'passworD43$x'; GRANT defaultrole TO clickhouseadmin; CREATE DATABASE foo_db; CREATE TABLE foodb.sourcetable ( id UInt64, value String ) ENGINE = MergeTree PRIMARY KEY id; CREATE DICTIONARY foodb.idvalue_dictionary ( id UInt64, value String ) PRIMARY KEY id SOURCE(CLICKHOUSE(TABLE 'sourcetable' USER 'clickhouseadmin' PASSWORD 'passworD43$x' DB 'foo_db' )) LAYOUT(FLAT()) LIFETIME(MIN 0 MAX 1000); ``` Input table (in the remote ClickHouse service) `source_table`: ``` text idvalue 1 First 2 Second ``` Creating the dictionary: ``` sql CREATE DICTIONARY idvaluedictionary ( id UInt64, value String ) PRIMARY KEY id SOURCE(CLICKHOUSE(HOST 'HOSTNAME' PORT 9000 USER 'default' PASSWORD 'PASSWORD' TABLE 'source_table' DB 'default')) LAYOUT(FLAT()) LIFETIME(MIN 0 MAX 1000) ``` ```sql CREATE DICTIONARY default.taxizonedictionary ( `LocationID` UInt16 DEFAULT 0, `Borough` String, `Zone` String, `service_zone` String ) PRIMARY KEY LocationID SOURCE(HTTP(URL 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxizonelookup.csv' FORMAT 'CSVWithNames')) LIFETIME(MIN 0 MAX 0) LAYOUT(HASHED()) ``` Please see the details in . See Also For more information, see the section. This table contains information about .