Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Como trabalhar com dados Avro, Arrow e ORC no ClickHouse

A fundação Apache lançou vários formatos de dados amplamente usados em ambientes de analytics, incluindo os populares Avro, Arrow e Orc. O ClickHouse oferece suporte à importação e à exportação de dados usando qualquer um deles.

Importando e exportando no formato Avro

O ClickHouse oferece suporte à leitura e à gravação de arquivos de dados Apache Avro, amplamente utilizados em sistemas Hadoop.

Para importar de um arquivo Avro, devemos usar o formato Avro na instrução INSERT:

INSERT INTO sometable
FROM INFILE 'data.avro'
FORMAT Avro

Com a função file(), também podemos explorar arquivos Avro antes de importar os dados de fato:

SELECT path, hits
FROM file('data.avro', Avro)
ORDER BY hits DESC
LIMIT 5;
┌─path────────────┬──hits─┐
│ Amy_Poehler     │ 62732 │
│ Adam_Goldberg   │ 42338 │
│ Aaron_Spelling  │ 25128 │
│ Absence_seizure │ 18152 │
│ Ammon_Bundy     │ 11890 │
└─────────────────┴───────┘

Para exportar para um arquivo Avro:

SELECT * FROM sometable
INTO OUTFILE 'export.avro'
FORMAT Avro;

Avro e os tipos de dados do ClickHouse

Considere a correspondência entre tipos de dados ao importar ou exportar arquivos Avro. Use conversão explícita de tipos ao carregar dados de arquivos Avro:

SELECT
    date,
    toDate(date)
FROM file('data.avro', Avro)
LIMIT 3;
┌──date─┬─toDate(date)─┐
│ 16556 │   2015-05-01 │
│ 16556 │   2015-05-01 │
│ 16556 │   2015-05-01 │
└───────┴──────────────┘

Mensagens Avro no Kafka

Quando as mensagens do Kafka usam o formato Avro, ClickHouse pode ler esses fluxos usando o formato AvroConfluent e o motor Kafka:

CREATE TABLE some_topic_stream
(
    field1 UInt32,
    field2 String
)
ENGINE = Kafka() SETTINGS
kafka_broker_list = 'localhost',
kafka_topic_list = 'some_topic',
kafka_group_name = 'some_group',
kafka_format = 'AvroConfluent';

Trabalhando com o formato Arrow

Outro formato colunar é o Apache Arrow, também suportado pelo ClickHouse para importação e exportação. Para importar dados de um arquivo Arrow, usamos o formato Arrow:

INSERT INTO sometable
FROM INFILE 'data.arrow'
FORMAT Arrow

A exportação para arquivo Arrow funciona da mesma forma:

SELECT * FROM sometable
INTO OUTFILE 'export.arrow'
FORMAT Arrow

Além disso, consulte correspondência entre tipos de dados para saber se algum deles precisa ser convertido manualmente.

Streaming de dados Arrow

O formato ArrowStream pode ser usado para trabalhar com streaming do Arrow (usado para processamento em memória). O ClickHouse pode ler e gravar streams Arrow.

Para demonstrar como o ClickHouse pode transmitir dados Arrow, vamos redirecioná-los para o seguinte script Python (ele lê o stream de entrada no formato Arrow streaming e gera o resultado como uma tabela do Pandas):

import sys, pyarrow as pa

with pa.ipc.open_stream(sys.stdin.buffer) as reader:
  print(reader.read_pandas())

Agora podemos transmitir dados do ClickHouse canalizando sua saída para o script:

clickhouse-client -q "SELECT path, hits FROM some_data LIMIT 3 FORMAT ArrowStream" | python3 arrow.py
                           path  hits
0       b'Akiba_Hebrew_Academy'   241
1           b'Aegithina_tiphia'    34
2  b'1971-72_Utah_Stars_season'     1

O ClickHouse também pode ler streams do Arrow usando o mesmo formato ArrowStream:

arrow-stream | clickhouse-client -q "INSERT INTO sometable FORMAT ArrowStream"

Usamos arrow-stream como uma possível fonte de dados Arrow em streaming.

Importação e exportação de dados ORC

O Apache ORC é um formato de armazenamento colunar normalmente usado no Hadoop. O ClickHouse oferece suporte tanto à importação quanto à exportação de dados ORC usando o formato ORC:

SELECT *
FROM sometable
INTO OUTFILE 'data.orc'
FORMAT ORC;

INSERT INTO sometable
FROM INFILE 'data.orc'
FORMAT ORC;

Além disso, consulte correspondência entre tipos de dados e configurações adicionais para ajustar a exportação e a importação.

Leitura adicional

O ClickHouse oferece suporte a muitos formatos, tanto de texto quanto binários, para atender a diversos cenários e plataformas. Explore mais formatos e maneiras de trabalhar com eles nos artigos a seguir:

Confira também o clickhouse-local - uma ferramenta portátil e completa para trabalhar com arquivos locais/remotos sem a necessidade do servidor ClickHouse.

Navigation