Ohhnews

分类导航

$ cd ..
foojay原文

NetBeans DataWrangler:在 Apache NetBeans 中查询、转换和编辑数据分析文件

#netbeans#数据分析#duckdb#sql#文件转换

Apache NetBeans DataWrangler 将数据分析的文件格式引入 Apache NetBeans 31:CSV、Apache Parquet、JSON 和 Excel,这些格式是 pandas、Spark、R、dbt、Power BI 以及 Excel 本身之间交换所使用的格式。

无需离开 IDE 即可查询、转换、检查、编辑和分析它们。它们会以文档形式打开,并带有各自的视图;你可以使用 SQL 查询它们,进行连接、聚合和透视操作,在格式之间转换,加载到表中并导出结果。SQL 编辑器增强了代码补全、文档、错误检查和针对分析型 SQL 的快速修复功能。

这一切背后的引擎是 DuckDB,它随插件一起打包。 [LOADING...]

源代码位于此处,非常欢迎提交 issue 和 pull request:github.com/geertjanw/Apache-NetBeans-Data-Wrangler

文件支持

Parquet。 Parquet 文件会在一个包含“可视化”和“查询”标签页的窗口中打开。“可视化”标签页显示行数和行组数、写入器和格式版本,以及一个列表格,其中包含 SQL 类型、物理类型、编码、压缩编解码器、压缩后与未压缩大小、最小值、最大值和空值计数。大小列中的横条显示每列在文件中所占的份额。其下方是行组和前五十行预览,LIST 和 STRUCT 值以 JSON 形式显示。“查询”标签页是一个针对该文件的 SQL 编辑器,预填了 read_parquet 查询和注释示例。 [LOADING...]

Excel。 工作簿以电子表格形式打开:带字母的列、带数字的行、网格上方的名称框和公式栏,以及底部每个工作表的一个标签页。标题单元格有一个下拉菜单,包含按 A-Z 排序、按 Z-A 排序和按值筛选;排序会重新编号行,筛选会隐藏行并以蓝色显示其原始编号,正如 Excel 所做的那样。列可以拖拽以重新排序和调整大小。可以从列标题和行标题插入或删除行和列。单元格和公式栏可编辑,Ctrl+S 将所有工作表写回文件,每次保存都会出现在“历史记录”标签页中。单元格通过 DuckDB 的 read_xlsx 读取,excel 扩展在首次使用时安装。每个工作表的已使用区域由工作簿自身确定,因此表头为空白或包含空行的工作表也会被完整读取。“查询”标签页使用 read_xlsx 读取工作簿。 [LOADING...]

CSV、TSV、JSON 和 JSON Lines 文件(.csv.tsv.json.jsonl.ndjson)拥有图标、编辑器以及与上述格式相同的右键菜单操作。

新建文件 › Analytics 包含五个脚本模板:SQL 查询、数据探索脚本、导入脚本、Parquet 查询脚本和导出脚本;每一行都有注释说明,并且在数据固定时给出预期结果,同时还附带示例 CSV、Parquet、JSON 和 Excel 文件。Parquet 示例包含 200 行,带有 LIST 和 STRUCT 列;JSON 示例包含嵌套对象和数组;Excel 示例包含两个工作表。 [LOADING...]

查询、转换、复制

右键单击 CSV、Parquet、JSON 或 Excel 文件,或在打开的 CSV 或 JSON 编辑器中右键单击,会提供查询当前所选文件并将其转换为其他格式之一的操作。 [LOADING...]

使用 DuckDB 查询 会打开一个绑定到 DuckDB 连接的 SQL 编辑器,其查询使用适当的函数读取文件:read_csvread_parquetread_json_auto(对于 JSON Lines 使用 read_json 并设置 format = 'newline_delimited')或 read_xlsx。查询下方是一组针对该格式的注释示例,例如 CSV 的 sniff_csv、Parquet 的 parquet_metadata、JSON 的 unnest(items, recursive := true) 以及 Excel 的 sheet = '...'。对于 Parquet 和 Excel 文件,查询会在文件自身的“查询”标签页中打开。

使用 DuckDB 转换 将文件写为 CSV、TSV、Parquet(zstd 或 snappy)、JSON Lines、JSON 数组、Excel 工作簿或 DuckDB 数据库文件。每次转换都是一条单独的 COPY ... TO 语句。保存对话框会在源文件旁边建议一个名称,转换完成时行数会显示在状态栏中。Excel 将每个数字存储为双精度浮点数。从 Excel 转换时,所有值均为整数的列会以整数形式写出。

复制文件路径 复制绝对路径,多选时每行一个。

SQL 编辑器

当编辑器的连接是 DuckDB 连接时,以下功能处于激活状态。 [LOADING...]

错误检查。 每条语句都会作为 EXPLAIN <statement> 发送给 DuckDB,DuckDB 会解析并绑定该语句而不会实际执行。语法错误会以红色下划线标出,未解析的名称以黄色下划线标出,位置以 DuckDB 报告的位置为准,工具提示中显示 DuckDB 的消息,包括其“Did you mean”和“Candidate bindings”提示。具有副作用的语句(例如 INSTALLSET)不会被发送。由于检查由引擎执行,因此 DuckDB 语法(如 QUALIFYPIVOTSELECT * EXCLUDE (...)GROUP BY ALL、FROM 前置查询和 lambda)都会被接受。

快速修复。 当 DuckDB 报告某个函数存在于尚未加载的扩展中时,Alt-Enter 会提议安装并加载该扩展... [LOADING...]

...在确认之后。当 DuckDB 建议某个名称时,Alt-Enter 会提议用该名称替换标识符。 [LOADING...]

同一文件中较早创建的对象不会被报告为缺失。一个脚本如果第一行创建表、第二行插入该表,那么在运行之前不会显示任何警告。

代码补全。 Ctrl+Space 会列出 duckdb_functions() 中的函数(包括已加载扩展中的函数),并带有签名和描述;还会列出目录中的表和视图、DuckDB 关键字和类型,以及作用域内的列。 [LOADING...]

s. 之后,它会列出 s 的列,s 可以是表、视图、公共表表达式、子查询或 read_csv(...) 调用。列通过向 DuckDB 发送 DESCRIBE 来解析。 [LOADING...]

文档。 如上所示,DuckDB 关键字和类型会着色,悬停时会显示摘要、语法和示例,并附带 DuckDB 文档的链接。对于 FROMGROUP BYINSERT 等标准关键字,会记录 DuckDB 为它们添加的扩展行为。悬停函数时会显示其签名和描述。相同的文本也会出现在代码补全的文档面板中。

代码模板。 31 个模板覆盖常见模式,例如 dqual 用于每组前 N 条,dpiv 用于交叉表,dasof 用于时间序列连接,dcsvdpq 用于读取文件,dcopy 用于写入 Parquet,dmacro 用于宏,dvals 用于内联数据。输入缩写并按 Tab 键即可。它们可以在“工具 › 选项 › 编辑器 › 代码模板 › SQL”中编辑,完整列表位于仓库 README 中

连接与扩展

  • 在“数据库”节点上的 注册 DuckDB 数据库 会创建到内存数据库或文件的连接,并提供只读模式、线程数和内存限制等选项。DuckDB 没有凭据,因此连接时不会弹出提示。每当某个功能需要连接时(例如从模板创建文件、打开 Parquet 或 Excel 文件、补全、转换),连接都会自动打开。如果不存在 DuckDB 连接,则会创建一个内存连接。

  • 连接上的 管理 DuckDB 扩展 会列出 duckdb_extensions() 的输出,并可通过单击安装或加载扩展。代码补全会立即更新。

[LOADING...]

  • 编辑器上下文菜单中的 在 DuckDB 结果查看器中运行,以及查询标签页中的“运行”,会执行语句并将包含嵌套值的结果显示为格式化的 JSON。不返回行的语句会报告受影响的行数。

设计

DataWrangler 没有 SQL 解析器,也没有数据库模式模型。编辑器报告的所有内容都来自对已连接的 DuckDB 数据库执行语句。

  • 为了检查语句,DataWrangler 会将其作为 EXPLAIN 运行,使 DuckDB 在不执行语句的情况下解析语句并解析其中的每个名称。DuckDB 的错误消息和位置成为下划线和工具提示。
  • 为了列出 s. 之后可用的列,它会对 s 所引用的任何内容运行 DESCRIBE,无论 s 是表、视图、公共表表达式、子查询还是 read_csv(...) 调用。函数列表从 duckdb_functions() 读取,Parquet 文件详细信息从 parquet_metadata() 读取,电子表格单元格从 read_xlsx() 读取。

这些语句在与同一数据库的单独连接上运行,因此编辑器的检查不会干扰用户正在运行的查询。

注意:

  • 编辑器所显示的内容对于所安装的 DuckDB 版本和所加载的扩展是正确的,并且当新的 DuckDB 版本增加语法时仍然正确,因为 DataWrangler 中没有任何需要更新的内容。
  • 另一方面,需要文件语法树的功能(例如在整个脚本中重命名别名)并未提供,而且大多数功能需要与打开的数据库建立连接,该连接会在需要时自动创建。

安装

  1. 在仓库的检出副本中使用 mvn install 构建(所有依赖项都在 Maven Central 上),或从仓库的 release 中下载 .nbm
  2. 选择“工具 › 插件 › 已下载 › 添加插件”,选中 datawrangler-1.0.0-SNAPSHOT.nbm,然后重启。
  3. “文件 › 新建文件 › Analytics › 示例 Parquet 文件”。打开“可视化”标签页,然后打开“查询”标签页,并使用 Ctrl+Shift+E 运行查询。

Apache NetBeans DataWrangler 根据 Apache License 2.0 许可。欢迎在 github.com/geertjanw/Apache-NetBeans-Data-Wrangler 提交 issue 和 pull request。

该文章 NetBeans DataWrangler: Query, Convert, and Edit Data Analytics Files 首次出现在 foojay 上。