- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
select distinct filename from dfs.contoso.`folder/CSVs/`
> 2021-01.csv
> 2021-02.csv
> ...
或
select count(*) as cnt from dfs.contoso.`folder/CSVs/`
where filename = '2021-01.csv'
> 4562751239
问题是这两个查询都需要一个小时。从计划中可以明显看出,Drill 会遍历目标文件夹中的所有文件,然后按文件名过滤数据。这对于更大的数据集来说绝对不可用。
不幸的是,我无法更改数据结构,也无法在 from 子句中包含单个文件(from dfs.contoso.
folder/CSVs/2021-01.csv`),因为此时 Drill不使用我需要的创建的 CSV 架构。
Drill 这样做有什么原因吗?我们怎样才能有效地做到这一点?
钻头 1.19
更新
主要问题不是枚举文件夹中的文件,而是从目录中的多个文件中读取单个文件的数据。
拥有这个文件系统:
CsvHistory/2019-01.csv [2GB]
CsvHistory/2019-02.csv [3GB]
...
CsvHistory/2021-09.csv [6GB]
我们需要直接从一个文件进行查询,不从文件夹中读取其他文件,并且不更改文件系统结构,因为这是不允许的。
我们需要此查询而不是遍历所有其他文件,因为这会极大地浪费性能。
最佳答案
很抱歉你放弃了 Drill,但我会把这篇文章发给可能正在阅读这篇文章的其他人。
您必须对 Drill 如何处理模式有所了解。首先,Drill 尝试从底层数据推断模式。对于上面列出的查询,看起来您正在尝试在给定目录中查找文件名并计算每个文件中的行数。这些都不需要模式。正如我提到的,您应该使用 INFORMATION_SCHEMA
查询目录或 SHOW FILES IN <dir>
查询那个。
如果 Drill 推断的模式不适合您,您可以在查询时或通过运行 CREATE SCHEMA
向 Drill 提供模式。查询将创建一个隐藏的模式文件。这是该功能的文档链接:https://drill.apache.org/docs/create-or-replace-schema/ .我没有广泛使用此功能,但我知道您当然可以为单个文件提供模式文件。不确定整个目录,但我相信这是为了做到这一点。
内联模式的文档有点缺乏,但您也可以在查询时执行此操作,如下所示:
SELECT Year
FROM table(dfs.test.`test.csvh` (schema=>'inline=(`Year` int)'))
WHERE Make = 'Ford'
这里的结果是 Year
列将被解释为 INT
而不是默认的 VARCHAR
.
**更新:**事实证明,您还可以在 table()
中提供架构上面的功能。见下文
SELECT Year
FROM table(dfs.test.`test.csvh` (schema => 'path=`/path/to/schema`'))
WHERE Make = 'Ford'
关于apache-drill - Apache Drill 中的 WHERE filename 对所有文件进行全面扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68849439/
假设您将 Drill 连接到两个独立的数据库,并且运行一个查询,从每个数据库中提取大量数据,然后进行联接。 Drill 如何处理这个问题而不引发内存不足错误?这是假设您请求的数据超出了 Drill 可
我想一次运行选择 Sql Server 查询。我在嵌入式模式下使用 Drill。 select * from ..; select * from ..; 例子:- select * from SqlS
Apache MetaModel 是一个数据访问框架,它为发现、探索和查询不同类型的数据源提供了一个通用接口(interface)。 Apache Drill 是一种无架构的 SQL 查询引擎,它通过
我在具有 16GB 内存的 ubuntu 机器上本地运行 apacherill 1.0(然后在 1.4 上)。当我使用一个非常大的制表符分隔文件(5200 万行,7GB)并执行 Select dist
我尝试了钻取 JDBC 驱动程序以编程方式进行查询。 代码的有用部分: Connection conn = new Driver().connect("jdbc:drill:zk=local", ge
我想连接到 Drill by Java 应用程序,到目前为止,我一直在尝试使用 JDBC 来完成它,我正在使用 https://github.com/vicenteg/DrillJDBCExample
select distinct filename from dfs.contoso.`folder/CSVs/` > 2021-01.csv > 2021-02.csv > ... 或 select
使用 apache drill 1.2,我们可以查询 RDBMS 数据。在这里查看更多信息:https://drill.apache.org/blog/2015/10/16/drill-1.2-rel
我在嵌入模式下使用drill,除了复制和粘贴之外,我不知道如何保存查询输出。 最佳答案 如果您使用 sqlline,则可以创建一个 CSV 格式的新表,如下所示: use dfs.tmp; alter
我在 ubuntu 14.04 64 机器上下载了 apache-drill-1.2.0。提取 tar.zip 内容,转到 bin 文件夹并运行钻取。 现在我尝试打开:http://localhost
Apache Drill 可以读取 ORC 文件吗? 最佳答案 这个答案是由用户 agirish 在 Apache Drill 邮件列表中发布的。复制到这里是为了对这个社区有用。 Drill can
我正在尝试在 Windows 10 x64(使用 Oracle JVM 1.8.0_131)上以嵌入式模式启动 Apache Drill 1.10。启动命令时 sqlline.bat -u "jdbc
当我打字 $ drillbit.sh start 它向我展示了这个错误: ERROR: Java 1.7 or later is required to run Apache Drill. 虽然我有最
我正在尝试在我们的 Drill (1.6.0) 系统上构建安全性。我设法让安全用户身份验证工作(如文档中所述的 JPam),但模拟似乎不起作用。它似乎通过管理员用户执行和获取,而不管谁通过 ODBC
我在 drill 中有一个这样的对象: {MyFruit: [{name:Mike, age:10},{name:Jacob,age:9},{name:William, age:6}]} 我可以通过以
我有按日期和时间组织的CSV文件,如下所示 logs/YYYY/MM/DD/CSV files... 我已设置Apache Drill在这些CSV文件之上执行SQL查询。由于有很多CSV文件;文件的组
我下载了 Apache Drill v1.8,编辑了 conf/drill-override.conf 以进行以下更改: drill.exec: { cluster-id: "drillbits1
我下载了 Apache Drill v1.8,编辑了 conf/drill-override.conf 以进行以下更改: drill.exec: { cluster-id: "drillbits1
我是 Emacs 新手,完成了 Emacs 和基本的 org-mode 教程。 现在我想安装 org-drill。以下是我在 Emacs 上安装 org-drill 的失败尝试。 来自 http://
下面的命令运行正常。 SELECT TO_TIMESTAMP(`ts`,'yyyyMMddHHmmss') FROM dfs.tmp`/mapr/my.cluster.com/hive/cpf_sal
我是一名优秀的程序员,十分优秀!