Экспорт в Apache Arrow
Все результаты запроса могут быть экспортированы в таблицу Apache Arrow с помощью функции arrow. В качестве альтернативы, результаты могут быть возвращены как RecordBatchReader с помощью функции fetch_record_batch и результаты могут быть прочитаны по одной партии за раз. Кроме того, отношения, построенные с помощью реляционного API DuckDB, также могут быть экспортированы.
Экспорт в таблицу Arrow
import duckdb
import pyarrow as pa
my_arrow_table = pa.Table.from_pydict({'i': [1, 2, 3, 4],
'j': ["one", "two", "three", "four"]})
# query the Apache Arrow Table "my_arrow_table" and return as an Arrow Table
results = duckdb.sql("SELECT * FROM my_arrow_table").arrow() Экспорт как RecordBatchReader
import duckdb
import pyarrow as pa
my_arrow_table = pa.Table.from_pydict({'i': [1, 2, 3, 4],
'j': ["one", "two", "three", "four"]})
# query the Apache Arrow Table "my_arrow_table" and return as an Arrow RecordBatchReader
chunk_size = 1_000_000
results = duckdb.sql("SELECT * FROM my_arrow_table").fetch_record_batch(chunk_size)
# Loop through the results. A StopIteration exception is thrown when the RecordBatchReader is empty
while True:
try:
# Process a single chunk here (just printing as an example)
print(results.read_next_batch().to_pandas())
except StopIteration:
print('Already fetched all batches')
break Экспорт из реляционного API
Объекты Arrow также могут быть экспортированы из реляционного API. Отношение может быть преобразовано в таблицу Arrow с помощью функций arrow или to_arrow_table, или в пакет записей с помощью record_batch. Результат может быть экспортирован в таблицу Arrow с помощью arrow или псевдонима fetch_arrow_table, или в RecordBatchReader с помощью fetch_arrow_reader.
import duckdb
# connect to an in-memory database
con = duckdb.connect()
con.execute('CREATE TABLE integers (i integer)')
con.execute('INSERT INTO integers VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (NULL)')
# Create a relation from the table and export the entire relation as Arrow
rel = con.table("integers")
relation_as_arrow = rel.arrow() # or .to_arrow_table()
# Or, calculate a result using that relation and export that result to Arrow
res = rel.aggregate("sum(i)").execute()
result_as_arrow = res.arrow() # or fetch_arrow_table()
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/guides/python/export_arrow.html