问题标签 [duckdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 有什么方法可以在 DuckDB 中使用 Java 获取可重新加载的数据库?
我有以下问题。我目前正在开发一个集成在 Java/JDBC 中的 DuckDb 项目。在他们的文档中,我没有找到合适的方法来生成关闭程序后不会消失的数据库。到目前为止,我的代码看起来就像我正在创建所有必要的表并将元组从 .tbl 文件克隆到它们中,每次我想运行查询时。有没有办法创建一次所有的表和数据,然后我只需要从磁盘加载 DuckDB 中的整个数据库?
jdbc - tableau如何连接duckdb
我下载duckdb jdbc驱动并将其复制到安装目录: C:\Program Files\Tableau\Drivers\duckdb_jdbc-0.2.9.jar 然后我启动 tableau ,并选择其他 jdbc 驱动程序进行连接, 设置如下配置这个 尝试连接到duckdb 失败屏幕 还有其他配置吗?我已经检查了官方文件,并没有发现与此相关的任何内容。
顺便说一句,在设置正确的类名和相同的连接 url 后,我可以使用 Jetbrains Datagrip IDE 成功连接吗?
Dukedb 数据库的行为类似于 sqlite,但用于分析工作负载。https://github.com/duckdb/duckdb
r - 使用多列时 tidyr::expand() 的 dbplyr 调度出现意外错误
文档中的以下示例tidyr::expand()
在本地内存中的 data.frame 上按预期工作。tbl_dbi
当在单个列上调用时,相同的示例适用于对象,但在应用于多个列时显示 SQL 解析错误:
由reprex 包于 2021-10-01 创建(v2.0.1)
为什么会发生这种情况,我们该如何避免呢?(在我看来,tidyr 翻译生成的 SQL 末尾附加了一个非常虚假的“q01”,但不知道为什么会出现这种情况以及为什么它只会在两列展开情况下发生)。
我怀疑这是一个错误,但在这种情况下,我不确定如何更好地查明错误的根源——即问题是由于 , , 或翻译的其他一些组件中的错误引起duckdb
的dbplyr
吗tidyr
?
sql - 从 SQL 查询中测量 ResultSet 的时间性能
我对“ResultSet”的理解有一些问题。如果我想测量执行查询所需的性能时间,我是否需要遍历Resultset --> while(rs.next()),因为实际结果集已经包含了所有结果?或者它更像是一个缓冲区,在迭代 ResultSet 时会生成一些元组?
对于此示例,性能存在巨大差异。当我只测量在没有 while 循环的情况下构建 ResultSet 所需的时间时,它只是时间的一小部分。这就是为什么我认为它可能取决于数据库,因为 DuckDB 通过数据库进行矢量化。
我现在的问题是,当我只想有时间回答查询时,哪种方式是正确的?
sql - 在两个或多个字段中提取具有重复值但在另一个字段中具有不同值的行 - 使用 SQL
这是线程在两个或多个字段中提取具有重复值但在另一个字段中具有不同值的行的后续内容
,目标是使用 SQL 和 DuckDB 对大于 RAM 的数据执行相同的操作。上述线程中的dupKeyEx()
函数代码仅适用于可轻松放入 RAM 的数据。
以下是该线程的要点:
目标是从上表中提取具有以下内容的行:
- 两个或多个字段中的相同值(此处为 NAME 和 DOB);但
- 另一个字段中的不同值(此处为 ID);和
- 其他列应保持原样
工作函数为:
这给出了预期的结果
但是,此功能不适用于无法轻松放入 RAM 的非常大的表。所以我想知道是否可以设计一些 SQL 查询来为非常大的表做同样的工作。来自https://duckdb.org/的DuckDB是一个非常高效的开源分析数据库,并且与 R 配合得非常好。所以我们尝试将上表导入 DuckDB 数据库,如下所示:
现在,需要编写一个功能性 SQL 查询,该查询将给出与上述dupKeEx()
函数相同的结果。如果该 SQL 查询运行良好并且使用大于 RAM 的表给出有效结果,则该线程的目标将被视为已完成。
任何帮助将不胜感激。
python - 将 DuckDB 与 s3 一起使用?
我正在尝试在 jupyter 笔记本中使用 DuckDB 来访问和查询 s3 中保存的一些镶木地板文件,但似乎无法使其正常工作。从过去的经验来看,我觉得我需要分配适当的文件系统,但我不确定如何/在哪里这样做。
下面的代码引发了错误:RuntimeError: IO Error: No files found that match the pattern "s3://<bucket>/<file>.parquet"
如果可以的话,我想使用 pandasread_sql
功能,但放置此代码以避免增加问题的复杂性。
我很困惑,因为这段代码有效:
python - 创建一个包含来自一组 CSV 的唯一值的极坐标数据框
我有 +3000 个带有 +10 列的 CSV。我需要的是从其中两个中获得所有独特的价值。我能够读取极坐标中的唯一值:
我可以一一阅读剩余的文件,即:
检查所有值是否不相等:
然后.drop_duplicates()
。但是由于所有输入文件已经在两列(chr,pos)上排序,并且差异在 16M 输入行中的数千个,我希望有更好的方法来做到这一点。
提前谢谢你的帮助
丹麦
编辑
还有另一种使用 Polars 和 DuckDB 的方法。
- 为每个输入创建镶木地板文件
- 运行duckdb并执行:
学分来自 DuckDB 的 Mark Mytherin
r - DuckDB R:计算多列的平均值和中位数
我有一个duckdb,想一次计算平均值和中位数或多列:
例如
c++ - 为什么使用 R CMD 检查而不是 R CMD INSTALL 编译duckdb?
我正在尝试使用 R Tools >4.0 工具链(来自 MSYS2 终端 x64 BASH shell)从 Windows 10 上的源代码压缩包编译鸭数据库包(来自 CRAN 的 0.3.1)。
编译是必要的,因为我们的防火墙会阻止从 CRAN 下载预构建的二进制文件。
我首先检查了包裹:
这--no-test-load
是因为我们有 DLL 白名单,所以我需要先构建 DLL,然后将它们列入白名单,然后才能加载它们。
这产生了预期的结果:可以编译包(对于 i386 和 x64 架构)并安装,但check
尝试加载包时出错:
安装日志中有一些与比较有符号和无符号值相关的警告,但没有致命的。这是i386
安装日志部分的结尾,在ld
链接 final时显示没有错误duckdb.dll
:
最后,我在“duckdb”目录中有一个完全编译和安装的包——由于 DLL 白名单,我无法将它加载到我的 R 会话中。到目前为止,一切都很好。
然后我尝试使用R CMD INSTALL --no-test-load -l . duckdb_0.3.1-1.tar.gz
(和变体)安装包。不幸的是,构建失败。日志似乎与它尝试将 .o 文件链接到 .o 文件的点相同duckdb.dll
,此时:
注意我已经混淆了可执行文件的完整路径,但是在没有编译代码的情况下构建和安装包没有问题,所以我知道 R 工具通常在这个环境中工作。check
我已经比较了和运行的安装日志,INSTALL
但我似乎找不到任何看起来很重要的东西。唯一真正的区别是,在check
日志中,使用波浪号的缩短路径似乎被传递给构建实用程序,例如-LC:<secret-path-with-tildes>/R-40~1.2/bin/i386 -lR
传递给ld
的参数,check
而在INSTALL
运行中使用扩展路径。这些路径有点长(大约 110 个字符),我想知道这是否会导致ld
窒息——但没有嵌入空格。我怀疑这是问题所在,但为了完整性而提及它。
R CMD check
通过调用了解确切的参数将非常有帮助,INSTALL
这样我就可以缩小范围。我在“编写 R 扩展”手册或“R 内部”手册的“工具”部分中找不到此文档。我还快速搜索了ld
手册,但没有提到长路径。如果不是很明显,我没有使用编译器的经验(除了在我家里的 Debian 盒子上发生的自动魔法)。我的下一个策略是进行源代码潜水,但我希望尽可能避免这种情况。
可能还值得一提的是,我们的站点包库已添加到我的.Rprofile
(除了 configure 之外什么都不做.libPaths()
),并且我知道check
应该使用 运行--vanilla
,所以我也尝试运行eg R --vanilla CMD INSTALL ...
,但结果相同。我还想知道分阶段安装目录是否可能有所不同,所以我尝试传递--no-staged-install
到INSTALL
,再次得到相同的结果,此时我决定寻求帮助以理解问题而不是继续试用-和错误。
duckdb - 使用 VARCHAR LIST 列从 parquet 文件复制到新 parquet 文件
语境
我使用 PostgreSQL 生成的 csv 文件创建了一个带有 duckdb 的 parquet 文件。这是使用的duckdb命令:
我留下stringArr
了镶木地板文件中的列,如下所示:
字符串Arr |
---|
{"Paint","Banana","500 Turnaround","Anti..."} |
{"Donald","Crouton","500 Turnaround","Anti..."} |
哪个是VARCHAR
(或BYTE_ARRAY
?)列,而不是VARCHAR[]
列。它没有检测到 PostgreSQL 的列表列编码。
问题
我有一个具有以下架构的镶木地板文件:
文件名 | 姓名 | 类型 | 类型长度 | 重复类型 | num_children | 转换类型 | 规模 | 精确 | field_id | 逻辑类型 |
---|---|---|---|---|---|---|---|---|---|---|
主镶木地板 | 鸭数据库模式 | 布尔值 | 0 | 必需的 | 6 | UTF8 | 0 | 0 | 0 | |
主镶木地板 | ID | BYTE_ARRAY | 0 | 可选的 | 0 | UTF8 | 0 | 0 | 0 | |
主镶木地板 | 字符串Arr | BYTE_ARRAY | 0 | 可选的 | 0 | UTF8 | 0 | 0 | 0 |
我试图在写入另一个镶木地板文件时从该文件中读取数据,目的是将astringArr
列转换VARCHAR
为 a VARCHAR[]
。
我首先尝试了以下命令:
但是,我收到以下错误:
我试过的
我尝试了一种解决方法,方法是创建一个main
在duckdb(非瞬态)数据库中调用的表,以便在写入COPY
新main2.parquet
文件之前临时保存数据。
但是,这很慢并且占用了我系统中的所有内存(64 GB)。正在读取的 parquet 文件非常大(35 GB)。这似乎不是一种最佳方法,因为不必要的双重写入磁盘 - 一次用于duckdb表,另一个用于创建具有所需VARCHAR[]
列的镶木地板文件。
COPY
有没有办法像 CSV 一样在开始之前定义镶木地板文件的模式?什么是一个好的方法?