在整个Apache Drill的Wiki中,我只能看到通过SqlLine客户端运行的查询.除了REST API之外,是否有任何编程方式在Drill中运行查询?任何样品或指针?
或者它是否与使用JDBC驱动程序运行SQL查询等效?
我有写在目录结构中的数据文件(在此示例中为json,但也可能是avro):
dataroot
+-- year=2015
+-- month=06
+-- day=01
+-- data1.json
+-- data2.json
+-- data3.json
+-- day=02
+-- data1.json
+-- data2.json
+-- data3.json
+-- month=07
+-- day=20
+-- data1.json
+-- data2.json
+-- data3.json
+-- day=21
+-- data1.json
+-- data2.json
+-- data3.json
+-- day=22
+-- data1.json
+-- data2.json
Run Code Online (Sandbox Code Playgroud)
使用spark-sql创建一个临时表:
CREATE TEMPORARY TABLE dataTable
USING org.apache.spark.sql.json
OPTIONS (
path "dataroot/*"
)
Run Code Online (Sandbox Code Playgroud)
查询表效果很好,但到目前为止,我无法使用目录进行修剪。
有没有一种方法可以将目录结构注册为分区(不使用Hive)以避免在查询时扫描整个树?假设我想比较每个月第一天的数据,并且只读取这几天的目录。
使用Apache Drill,我可以在查询期间使用目录作为谓词,dir0等等。是否可以使用Spark SQL做类似的事情?
我想通过Java应用程序连接到Drill,到目前为止我尝试使用JDBC来执行此操作,并且我使用的是https://github.com/vicenteg/DrillJDBCExample中的示例,但是...当我更改DB_URL静态时变量为 "jdbc:drill:zk = local"并启动app我得到异常:
java.sql.SQLNonTransientConnectionException:不支持使用Drill的jdbc-all JDBC驱动程序Jar文件在嵌入模式下运行钻取.
到目前为止,我没有找到任何解决方法.知道如何在嵌入模式下连接Drill吗?到目前为止,我不想设置分布式模式.
网上真的没什么关系.
任何帮助,将不胜感激!
我想从使用Apache Drill在CSV数据(在HDFS上)执行的查询结果中创建Spark SQL DataFrame.我成功配置了Spark SQL,使其通过JDBC连接到Drill:
Map<String, String> connectionOptions = new HashMap<String, String>();
connectionOptions.put("url", args[0]);
connectionOptions.put("dbtable", args[1]);
connectionOptions.put("driver", "org.apache.drill.jdbc.Driver");
DataFrame logs = sqlc.read().format("jdbc").options(connectionOptions).load();
Run Code Online (Sandbox Code Playgroud)
Spark SQL执行两个查询:第一个获取模式,第二个查询实际数据:
SELECT * FROM (SELECT * FROM dfs.output.`my_view`) WHERE 1=0
SELECT "field1","field2","field3" FROM (SELECT * FROM dfs.output.`my_view`)
Run Code Online (Sandbox Code Playgroud)
第一个是成功的,但在第二个中Spark包含双引号内的字段,这是Drill不支持的内容,因此查询失败.
有人设法使这种集成工作吗?
谢谢!
我想使用相同的存储插件加入两个表.但其中一列显示空值.我正在使用此查询: -
select * from SqlServer.test_mopslive.reports as Reports join
SqlServer.test_mopslive.reportsetting as ReportSetting on Reports.ID = ReportSetting.ID
Run Code Online (Sandbox Code Playgroud)
这SqlServer是存储插件名称,test_mopslive是数据库名称reports,reportsetting是表名称.
执行此查询时T_ID显示Null.
但如果我使用两个不同的存储插件名称和相同的凭据,它可以正常工作.
表格1:-
create table Reports (ID bigint, Name varchar(25));
insert into Reports values (29, 'SqlThree');
insert into Reports values (30, 'SqlTwo');
insert into Reports values (31, 'SqlThree');
Run Code Online (Sandbox Code Playgroud)
TABLE 2:-
CREATE TABLE ReportSetting
(
P_id bigint not null auto_increment primary key,
Name varchar(25),
ID bigint,
CONSTRAINT fk_ID FOREIGN KEY (ID)
REFERENCES Reports(ID));
insert into ReportSetting …Run Code Online (Sandbox Code Playgroud) 我使用drill-embedded来执行SQL,我可以在HBase中看到这些表.这是终端输出..
0: jdbc:drill:zk=local> SELECT * FROM students;
Error: SYSTEM ERROR: IllegalAccessError: tried to access method
com.google.common.base.Stopwatch.<init>()V from class
org.apache.hadoop.hbase.zookeeper.MetaTableLocator
[Error Id: 9c656263-c774-4aaf-a789-d4e374adb69b on localhost:31010]
(state=,code=0)
Run Code Online (Sandbox Code Playgroud)
请提前告知我要对Drill执行查询所要做的事情.
我正在研究 Apache Drill 的 SQLAlchemy 方言,但遇到了一个我似乎无法弄清楚的问题。
基本问题是 SQLAlchemy 正在生成如下查询:
SELECT `field1`, `field2`
FROM dfs.test.data.csv LIMIT 100
Run Code Online (Sandbox Code Playgroud)
失败是因为data.csv需要在它周围加上反引号,如下所示:
SELECT `field1`, `field2`
FROM dfs.test.`data.csv` LIMIT 100
Run Code Online (Sandbox Code Playgroud)
我已经visit_()在方言的编译器中定义了各种函数,但这些似乎没有效果。
我一直在寻找这个问题的解决方案。
在我看来,如果不依赖HDFS和Hadoop,就无法在Java程序中嵌入读写Parquet格式。它是否正确?
我想在Hadoop集群之外的客户端计算机上进行读写。
我开始对Apache Drill感到兴奋,但是看来它必须作为单独的进程运行。我需要的是一种使用Parquet格式读写文件的过程中功能。
我试图在Windows 10 x64(使用Oracle JVM 1.8.0_131)的嵌入式模式下启动Apache Drill 1.10.启动命令时
sqlline.bat -u "jdbc:drill:zk=local"
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
Error during udf area creation [/C:/Users/<user>/drill/udf/registry] on file system [file:///] (state=,code=0)
Run Code Online (Sandbox Code Playgroud)
所以,经过一些谷歌搜索后,我以这种方式更改了drill-override.conf文件:
drill.exec: {
cluster-id: "drillbits1",
zk.connect: "localhost:2181",
udf: {
# number of retry attempts to update remote function registry
# if registry version was changed during update
retry-attempts: 10,
directory: {
# Override this property if custom file system should be used to create remote directories
# instead of default taken from Hadoop configuration
fs: "file:///",
# Set …Run Code Online (Sandbox Code Playgroud) 我在 Windows 10 上使用 apache-drill-1.12.0。发送任何查询时出现“无当前连接”错误。此外,应该在 localhost:8047 上运行的钻取 Web 控制台不起作用。
我在 StackOverflow 上搜索了很多关于正确设置 JAVA_HOME 环境变量以避免错误的答案。
我已经正确设置了 JAVA_HOME 系统变量,这是证明。
C:\Users\Dinesh>java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
C:\Users\Dinesh>javac -version
javac 1.8.0_171
C:\Users\Dinesh>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_171
Run Code Online (Sandbox Code Playgroud)
现在这是以下一组错误,我在 Windows 10 上遇到了 apache 钻孔。
C:\Users\Dinesh\Desktop\Drill\apache-drill-1.12.0\bin>sqlline.bat -u "jdbc:drill:zk=local"
DRILL_ARGS - " -u jdbc:drill:zk=local"
HADOOP_HOME not detected...
HBASE_HOME not detected...
Calculating Drill classpath...
Error: Failure in starting embedded Drillbit: java.lang.RuntimeException: Unable to deserialize "/tmp/drill/sys.storage_plugins/openTSDB.sys.drill" (state=,code=0) …Run Code Online (Sandbox Code Playgroud) apache-drill ×10
hadoop ×4
apache-spark ×2
java ×2
jdbc ×2
apache ×1
data-formats ×1
hbase ×1
parquet ×1
python ×1
sql-server ×1
sqlalchemy ×1
windows-10 ×1