Импала Типы данных

Я пытаюсь понять разницу между следующими данными в Impala.

  1. Нить
  2. Чар
  3. Варчар

Будучи схемой при чтении, потребуется 3 разных типа. Мне интересно, есть ли какие-либо преимущества в производительности от использования Char/Varchars по сравнению со строками в сценариях, где мы знаем верхние границы длины столбцов?


person user1971133    schedule 02.04.2015    source источник


Ответы (1)


STRING хранит данные переменной длины и является (по сути, за исключением некоторых практических ограничений, конечно) неограниченным.

VARCHAR(x) хранит данные переменной длины с верхней границей x символов, поэтому данные будут усечены до определенной длины. Например, если у вас есть VARCHAR(10), ваши входные данные могут иметь размер в [0,10].

CHAR(x) — это тип данных с фиксированным размером x-символов. Данные дополняются, если они короче x. Данные усекаются, если они длиннее x.

И VARCHAR, и CHAR были представлены в Impala 2.0.0 (CDH 5.2.0) и в основном полезны для совместимости с другими системами баз данных. Однако и VARCHAR, и CHAR не рекомендуются, за исключением некоторых особых случаев использования (с определенными устаревшими системами), поскольку оба имеют некоторые функциональные ограничения.

Хотя между STRING и VARCHAR должна быть одинаковая производительность, CHAR имеет некоторые другие характеристики: в частности, он не сгенерирован кодом, поэтому, как правило, производительность будет страдать. Однако небольшие CHARs (где x < 128) сохраняются вместе с кортежами во время выполнения, а не во вспомогательной памяти, как данные переменной длины.

Выше приведены некоторые различия между этими типами, но по возможности рекомендуется использовать STRING.

См. STRING, VARCHAR и < href="http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/latest/topics/impala_char.html" rel="nofollow noreferrer">CHAR для получения более подробной информации. .

person Matt    schedule 02.04.2015
comment
Мэтт спасибо за ответ. Если я правильно понимаю, имеет больше смысла использовать String вместо VARCHAR(x) даже если мы знаем верхние границы, чтобы облегчить эволюцию схемы. Определены ли эти типы в Impala по соображениям совместимости или в каких-либо конкретных случаях, когда 1 имеет смысл по сравнению с другими. Мне бы очень хотелось увидеть документ, в котором объясняется, когда использовать каждый тип данных и почему. - person user1971133; 03.04.2015
comment
Да, STRING должно быть проще в использовании по причинам эволюции схемы. VARCHAR в основном полезен для совместимости с кодом из других или устаревших систем баз данных, которые используют типы VARCHAR. - person Matt; 03.04.2015