---
title: Databend 开源周报第 113 期
description: '了解如何将数据导入具有额外列的表。此外，Databend 为 ParquetReader 设计了一些读策略以重用数据块。'
slug: category-weekly/databend-weekly-113
date: 2023-10-02
tags: [weekly]
category: Weekly
cover_url: 'weekly/weekly-113.jpg'
image: 'weekly/weekly-113.jpg'
contributors:
  - name: andylokandy
  - name: ariesdevil
  - name: b41sh
  - name: BohuTang
  - name: Dousir9
  - name: drmingdrmer
  - name: everpcpc
  - name: flaneur2020
  - name: JackTan25
  - name: PsiACE
  - name: RinChanNOWWW
  - name: SkyFan2002
  - name: soyeric128
  - name: sundy-li
  - name: TCeason
  - name: Xuanwo
  - name: xudong963
  - name: youngsofun
  - name: zenus
  - name: zhang2014
  - name: ZhiHanZ
  - name: zhyass
authors:
  - DatabendLabs
---

> 英文版移步：https://www.databend.com/blog/2023-10-01-databend-weekly
>
> [Databend](https://github.com/databendlabs/databend) 是一款现代云数仓。专为弹性和高效设计，为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务：[https://app.databend.cn](https://app.databend.cn) 。

## What's On In Databend

探索 Databend 本周新进展，遇到更贴近你心意的 Databend。

### 数据导入具有额外列的表

默认情况下，`COPY INTO` 会按照文件中的字段顺序与表中对应的列进行匹配，从而将数据导入到表中。关键在于确保文件和表之间的数据正确对齐。

如果表中的列数大于文件中的字段数，可以手动指定需要导入数据的列来保证对齐。

而在导入 CSV 格式的数据文件时，如果表中的列数大于文件中的字段数，且额外列位于表的末尾，则可以使用 `FILE_FORMAT` 选项 `ERROR_ON_COLUMN_COUNT_MISMATCH` 来导入数据。

如果您想了解更多信息，请查看下面列出的资源。

- [Docs | Example 5: Loading to Table with Extra Columns](https://docs.databend.cn/sql/sql-commands/dml/dml-copy-into-table#example-5-loading-to-table-with-extra-columns)

{/* truncate */}

## Code Corner

一起来探索 Databend 和周边生态中的代码片段或项目。

### 为 ParquetReader 设计读策略

直接使用 `arrow-rs` 的 API 存在一些问题，当我们尝试为 prewhere 和 topk 下推预取数据时，无法重用之前已经反序列化过的数据块，而在现有的实现上支持重用逻辑会很复杂。

为了改善 row group 的读逻辑并且重用上一个阶段中的预取数据，我们对相关逻辑进行了大量的重构并且引入了读策略进行解耦。

**NoPrefetchPoliy**

没有预取阶段。直接读、反序列化并输出你需要的数据块。

**PredicateAndTopkPolicy**

在预取阶段预取 prewhere 和 topk 需要的列。它们反序列化为 `DataBlock` ，并将其计入 `RowSelection` 。然后按批大小分割 `DataBlock` 并将结果存储在内存中的 `VecDeque` 中。

在最后阶段读取 `RowSelection` 指定的剩余列，并按批输出 `DataBlocks` 。接着合并预取数据并根据 `output_schema` 来投影得到结果数据块。

**TopkOnlyPolicy**

与 `PredicateAndTopkPolicy` 类似，但在预取阶段只考虑 topk。

如果您想了解更多信息，请查看下面列出的资源。

- [PR #13020 | refactor: introduce ReadPolicy to parquet reader](https://github.com/databendlabs/databend/pull/13020)

## Highlights

以下是一些值得注意的事件，也许您可以找到感兴趣的内容。

- 在 Query 日志中增加 Spill 相关信息。
- 支持使用 COPY INTO 将数据导出为压缩文件。
- 引入 `GET /v1/background/:tenant/background_tasks` HTTP API 来查询后台任务。
- 阅读 [Example 4: Filtering Files with Pattern](https://docs.databend.cn/sql/sql-commands/dml/dml-copy-into-table#example-4-filtering-files-with-pattern) 以了解如何使用模式来过滤文件。

## What's Up Next

我们始终对前沿技术和创新理念持开放态度，欢迎您加入社区，为 Databend 注入活力。

### 修复由 SQLsmith 检测出的问题

自上个月引入 SQLsmith 测试，累计检测出大约 40 个问题。Databend Labs 正在致力于修复这些问题来改善各种场景下的系统稳定性。

我们希望你也可以参与到这项工作中，其中可能会有一些涉及类型转换和特殊值处理的简单任务，可以参考之前的其他修复进行处理。

[Issues | Found by SQLsmith](https://github.com/databendlabs/databend/issues?q=is%3Aissue+is%3Aopen+label%3Afound-by-sqlsmith)

如果你对这个主题感兴趣，可以尝试解决其中的部分问题或者参与讨论和 PR review。或者，你可以点击 https://link.databend.com/i-m-feeling-lucky 来挑选一个随机问题，祝好运！

## New Contributors

一起认识社区中的新伙伴，Databend 因你们而变得更加美好。

- [@zenus](https://github.com/zenus) 修复了在执行`COPY INTO`期间未检测到模式不匹配的问题，[#13010](https://github.com/databendlabs/databend/pull/13010).

## Changelog

前往查看 Databend 每日构建的变更日志，以了解开发的最新动态。

地址：https://github.com/databendlabs/databend/releases
