Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Funciones para trabajar con diccionarios integrados

Para obtener información sobre cómo crear listas de referencia, consulte la sección "Diccionarios".

Múltiples geobases

ClickHouse permite trabajar simultáneamente con múltiples geobases alternativas (jerarquías regionales) para admitir distintas perspectivas sobre a qué países pertenecen ciertas regiones.

La configuración de clickhouse-server especifica el archivo con la jerarquía regional:

<path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file>

Además de este archivo, también busca archivos cercanos que tengan el símbolo _ y cualquier sufijo añadido al nombre (antes de la extensión del archivo). Por ejemplo, también encontrará el archivo /opt/geo/regions_hierarchy_ua.txt, si existe. Aquí, ua se denomina la clave del diccionario. En el caso de un diccionario sin sufijo, la clave es una cadena vacía.

Todos los diccionarios se recargan durante el tiempo de ejecución (cada cierto número de segundos, según se define en el parámetro de configuración builtin_dictionaries_reload_interval, o una vez por hora de forma predeterminada). Sin embargo, la lista de diccionarios disponibles se define una sola vez, cuando se inicia el servidor.

Todas las funciones para trabajar con regiones tienen un argumento opcional al final: la clave del diccionario. A esto se le llama la geobase.

Ejemplo:

regionToCountry(RegionID) –

regionToName

Acepta un ID de región y geobase, y devuelve una cadena con el nombre de la región en el idioma correspondiente. Si no existe una región con el ID especificado, se devuelve una cadena vacía.

Sintaxis

regionToName(id\

Parámetros

Valor devuelto

  • Nombre de la región en el idioma correspondiente indicado por geobase. String.
  • De lo contrario, una cadena vacía.

Ejemplo

Querysql
SELECT regionToName(number::UInt32,'en') FROM numbers(0,5);
Responsetext
┌─regionToName(CAST(number, 'UInt32'), 'en')─┐
│                                            │
│ World                                      │
│ USA                                        │
│ Colorado                                   │
│ Boulder County                             │
└────────────────────────────────────────────┘

regionToCity

Acepta un ID de región de la geobase. Si esta región es una ciudad o parte de una ciudad, devuelve el ID de región de la ciudad correspondiente. En caso contrario, devuelve 0.

Sintaxis

regionToCity(id [, geobase])

Parámetros

Valor devuelto

  • ID de la región de la ciudad correspondiente, si existe. UInt32.
  • 0, si no existe.

Ejemplo

Querysql
SELECT regionToName(number::UInt32, 'en'), regionToCity(number::UInt32) AS id, regionToName(id, 'en') FROM numbers(13);
Responseresponse
┌─regionToName(CAST(number, 'UInt32'), 'en')─┬─id─┬─regionToName(regionToCity(CAST(number, 'UInt32')), 'en')─┐
│                                            │  0 │                                                          │
│ World                                      │  0 │                                                          │
│ USA                                        │  0 │                                                          │
│ Colorado                                   │  0 │                                                          │
│ Boulder County                             │  0 │                                                          │
│ Boulder                                    │  5 │ Boulder                                                  │
│ China                                      │  0 │                                                          │
│ Sichuan                                    │  0 │                                                          │
│ Chengdu                                    │  8 │ Chengdu                                                  │
│ America                                    │  0 │                                                          │
│ North America                              │  0 │                                                          │
│ Eurasia                                    │  0 │                                                          │
│ Asia                                       │  0 │                                                          │
└────────────────────────────────────────────┴────┴──────────────────────────────────────────────────────────┘

regionToArea

Convierte una región en un área (tipo 5 en la geobase). En todos los demás aspectos, esta función es igual que 'regionToCity'.

Sintaxis

regionToArea(id [, geobase])

Parámetros

Valor devuelto

  • ID de la región del área correspondiente, si existe. UInt32.
  • 0 si no existe.

Ejemplo

Querysql
SELECT DISTINCT regionToName(regionToArea(toUInt32(number), 'ua'))
FROM system.numbers
LIMIT 15
Responsetext
┌─regionToName(regionToArea(toUInt32(number), \'ua\'))─┐
│                                                      │
│ Moscow and Moscow region                             │
│ St. Petersburg and Leningrad region                  │
│ Belgorod region                                      │
│ Ivanovsk region                                      │
│ Kaluga region                                        │
│ Kostroma region                                      │
│ Kursk region                                         │
│ Lipetsk region                                       │
│ Orlov region                                         │
│ Ryazan region                                        │
│ Smolensk region                                      │
│ Tambov region                                        │
│ Tver region                                          │
│ Tula region                                          │
└──────────────────────────────────────────────────────┘

regionToDistrict

Convierte una región en un distrito federal (tipo 4 en la geobase). Por lo demás, esta función es igual que 'regionToCity'.

Sintaxis

regionToDistrict(id [, geobase])

Parámetros

Valor devuelto

  • ID de la región de la ciudad correspondiente, si existe. UInt32.
  • 0, si no existe ninguna.

Ejemplo

Querysql
SELECT DISTINCT regionToName(regionToDistrict(toUInt32(number), 'ua'))
FROM system.numbers
LIMIT 15
Responsetext
┌─regionToName(regionToDistrict(toUInt32(number), \'ua\'))─┐
│                                                          │
│ Central federal district                                 │
│ Northwest federal district                               │
│ South federal district                                   │
│ North Caucases federal district                          │
│ Privolga federal district                                │
│ Ural federal district                                    │
│ Siberian federal district                                │
│ Far East federal district                                │
│ Scotland                                                 │
│ Faroe Islands                                            │
│ Flemish region                                           │
│ Brussels capital region                                  │
│ Wallonia                                                 │
│ Federation of Bosnia and Herzegovina                     │
└──────────────────────────────────────────────────────────┘

regionToCountry

Convierte una región en un país (tipo 3 de la geobase). Por lo demás, esta función es igual que 'regionToCity'.

Sintaxis

regionToCountry(id [, geobase])

Parámetros

Valor devuelto

  • ID de la región del país correspondiente, si existe. UInt32.
  • 0, si no existe.

Ejemplo

Querysql
SELECT regionToName(number::UInt32, 'en'), regionToCountry(number::UInt32) AS id, regionToName(id, 'en') FROM numbers(13);
Responsetext
┌─regionToName(CAST(number, 'UInt32'), 'en')─┬─id─┬─regionToName(regionToCountry(CAST(number, 'UInt32')), 'en')─┐
│                                            │  0 │                                                             │
│ World                                      │  0 │                                                             │
│ USA                                        │  2 │ USA                                                         │
│ Colorado                                   │  2 │ USA                                                         │
│ Boulder County                             │  2 │ USA                                                         │
│ Boulder                                    │  2 │ USA                                                         │
│ China                                      │  6 │ China                                                       │
│ Sichuan                                    │  6 │ China                                                       │
│ Chengdu                                    │  6 │ China                                                       │
│ America                                    │  0 │                                                             │
│ North America                              │  0 │                                                             │
│ Eurasia                                    │  0 │                                                             │
│ Asia                                       │  0 │                                                             │
└────────────────────────────────────────────┴────┴─────────────────────────────────────────────────────────────┘

regionToContinent

Convierte una región en un continente (tipo 1 de la geobase). En todo lo demás, esta función es igual que 'regionToCity'.

Sintaxis

regionToContinent(id [, geobase])

Parámetros

Valor devuelto

  • ID de la región del continente correspondiente, si existe. UInt32.
  • 0, si no existe.

Ejemplo

Querysql
SELECT regionToName(number::UInt32, 'en'), regionToContinent(number::UInt32) AS id, regionToName(id, 'en') FROM numbers(13);
Responsetext
┌─regionToName(CAST(number, 'UInt32'), 'en')─┬─id─┬─regionToName(regionToContinent(CAST(number, 'UInt32')), 'en')─┐
│                                            │  0 │                                                               │
│ World                                      │  0 │                                                               │
│ USA                                        │ 10 │ North America                                                 │
│ Colorado                                   │ 10 │ North America                                                 │
│ Boulder County                             │ 10 │ North America                                                 │
│ Boulder                                    │ 10 │ North America                                                 │
│ China                                      │ 12 │ Asia                                                          │
│ Sichuan                                    │ 12 │ Asia                                                          │
│ Chengdu                                    │ 12 │ Asia                                                          │
│ America                                    │  9 │ America                                                       │
│ North America                              │ 10 │ North America                                                 │
│ Eurasia                                    │ 11 │ Eurasia                                                       │
│ Asia                                       │ 12 │ Asia                                                          │
└────────────────────────────────────────────┴────┴───────────────────────────────────────────────────────────────┘

regionToTopContinent

Devuelve el continente de nivel superior en la jerarquía para la región.

Sintaxis

regionToTopContinent(id[, geobase])

Parámetros

Valor devuelto

  • Identificador del continente de nivel superior (al subir por la jerarquía de regiones).UInt32.
  • 0, si no existe ninguno.

Ejemplo

Querysql
SELECT regionToName(number::UInt32, 'en'), regionToTopContinent(number::UInt32) AS id, regionToName(id, 'en') FROM numbers(13);
Responsetext
┌─regionToName(CAST(number, 'UInt32'), 'en')─┬─id─┬─regionToName(regionToTopContinent(CAST(number, 'UInt32')), 'en')─┐
│                                            │  0 │                                                                  │
│ World                                      │  0 │                                                                  │
│ USA                                        │  9 │ America                                                          │
│ Colorado                                   │  9 │ America                                                          │
│ Boulder County                             │  9 │ America                                                          │
│ Boulder                                    │  9 │ America                                                          │
│ China                                      │ 11 │ Eurasia                                                          │
│ Sichuan                                    │ 11 │ Eurasia                                                          │
│ Chengdu                                    │ 11 │ Eurasia                                                          │
│ America                                    │  9 │ America                                                          │
│ North America                              │  9 │ America                                                          │
│ Eurasia                                    │ 11 │ Eurasia                                                          │
│ Asia                                       │ 11 │ Eurasia                                                          │
└────────────────────────────────────────────┴────┴──────────────────────────────────────────────────────────────────┘

regionToPopulation

Obtiene la población de una región. La población puede estar registrada en archivos de geobase. Consulte la sección "Diccionarios". Si la población no está registrada para la región, devuelve 0. En la geobase, la población puede estar registrada para regiones subordinadas, pero no para las regiones superiores.

Sintaxis

regionToPopulation(id[, geobase])

Parámetros

Valor devuelto

  • Población de la región. UInt32.
  • 0, si no existe.

Ejemplo

Querysql
SELECT regionToName(number::UInt32, 'en'), regionToPopulation(number::UInt32) AS id, regionToName(id, 'en') FROM numbers(13);
Responsetext
┌─regionToName(CAST(number, 'UInt32'), 'en')─┬─population─┐
│                                            │          0 │
│ World                                      │ 4294967295 │
│ USA                                        │  330000000 │
│ Colorado                                   │    5700000 │
│ Boulder County                             │     330000 │
│ Boulder                                    │     100000 │
│ China                                      │ 1500000000 │
│ Sichuan                                    │   83000000 │
│ Chengdu                                    │   20000000 │
│ America                                    │ 1000000000 │
│ North America                              │  600000000 │
│ Eurasia                                    │ 4294967295 │
│ Asia                                       │ 4294967295 │
└────────────────────────────────────────────┴────────────┘

regionIn

Comprueba si una región lhs pertenece a una región rhs. Devuelve un valor UInt8 igual a 1 si pertenece, o 0 si no.

Sintaxis

regionIn(lhs, rhs\

Parámetros

  • lhs — ID de región de lhs de la geobase. UInt32.
  • rhs — ID de región de rhs de la geobase. UInt32.
  • geobase — Clave del diccionario. Consulte Múltiples geobases. String. Opcional.

Valor devuelto

  • 1, si pertenece. UInt8.
  • 0, si no pertenece.

Detalles de implementación

La relación es reflexiva: cualquier región también pertenece a sí misma.

Ejemplo

Querysql
SELECT regionToName(n1.number::UInt32, 'en') || (regionIn(n1.number::UInt32, n2.number::UInt32) ? ' is in ' : ' is not in ') || regionToName(n2.number::UInt32, 'en') FROM numbers(1,2) AS n1 CROSS JOIN numbers(1,5) AS n2;
Responsetext
World is in World
World is not in USA
World is not in Colorado
World is not in Boulder County
World is not in Boulder
USA is in World
USA is in USA
USA is not in Colorado
USA is not in Boulder County
USA is not in Boulder    

regionHierarchy

Acepta un número UInt32: el ID de región de la geobase. Devuelve un array de ID de región que incluye la región proporcionada y todas sus regiones padre en la jerarquía.

Sintaxis

regionHierarchy(id\

Parámetros

Valor devuelto

  • Array de ID de región que consta de la región proporcionada y de todos sus padres en la cadena. Array(UInt32).

Ejemplo

Querysql
SELECT regionHierarchy(number::UInt32) AS arr, arrayMap(id -> regionToName(id, 'en'), arr) FROM numbers(5);
Responsetext
┌─arr────────────┬─arrayMap(lambda(tuple(id), regionToName(id, 'en')), regionHierarchy(CAST(number, 'UInt32')))─┐
│ []             │ []                                                                                           │
│ [1]            │ ['World']                                                                                    │
│ [2,10,9,1]     │ ['USA','North America','America','World']                                                    │
│ [3,2,10,9,1]   │ ['Colorado','USA','North America','America','World']                                         │
│ [4,3,2,10,9,1] │ ['Boulder County','Colorado','USA','North America','America','World']                        │
└────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────┘
Navigation