在Spark 2.1中,我经常使用类似的东西
df = spark.read.parquet(/path/to/my/files/*.parquet)
加载拼花文件文件夹,即使使用不同的模式。然后,我使用SparkSQL对数据帧执行一些SQL查询。
现在我想试试黑斑羚,因为我读了这篇维基文章,其中包含如下句子:
Apache Impala是一个开源的大规模并行处理(MPP)SQL查询引擎,用于存储在运行Apache Hadoop[…]的计算机集群中的数据。
读取Hadoop文件格式,包括text、LZO、SequenceFile、Avro、RCFile和Parquet。
所以听起来它也可以适合我的用例(并且执行速度可能更快)。
但当我尝试以下事情时:
CREATE EXTERNAL TABLE ingest_parquet_files LIKE PARQUET
'/path/to/my/files/*.parquet'
STORED AS PARQUET
LOCATION '/tmp';
我得到一个AnalysisException
AnalysisException:无法推断架构,路径不是文件
所以现在我的问题是:是否有可能使用Impala读取包含多个拼花文件的文件夹?Impala会像火花一样执行模式合并吗?执行此操作需要什么查询?使用Google找不到有关它的任何信息。(总是一个坏迹象...)
谢谢
据我所知,你有一些拼花文件,你想通过黑斑羚桌子看到它们?下面是我对此的解释。
您可以创建一个外部表,并将位置设置为parquet files目录,如下所示
CREATE EXTERNAL TABLE ingest_parquet_files(col1 string, col2 string) LOCATION "/path/to/my/files/" STORED AS PARQUET;
在创建表之后,您还有另一个加载拼花地板文件的选项
LOAD DATA INPATH "Your/HDFS/PATH" INTO TABLE schema.ingest_parquet_files;
您正在尝试的操作也会起作用,您必须删除通配符,因为它需要在LIKE拼花后面有一个路径,并在该位置查找文件。
CREATE EXTERNAL TABLE ingest_parquet_files LIKE PARQUET
'/path/to/my/files/'
STORED AS PARQUET
LOCATION '/tmp';
以下是您可以参考的模板,该模板来自Cloudera impala文档。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE PARQUET 'hdfs_path_of_parquet_file'
[COMMENT 'table_comment']
[PARTITIONED BY (col_name data_type [COMMENT 'col_comment'], ...)]
[WITH SERDEPROPERTIES ('key1'='value1', 'key2'='value2', ...)]
[
[ROW FORMAT row_format] [STORED AS file_format]
]
[LOCATION 'hdfs_path']
[TBLPROPERTIES ('key1'='value1', 'key2'='value2', ...)]
[CACHED IN 'pool_name' [WITH REPLICATION = integer] | UNCACHED]
data_type:
primitive_type
| array_type
| map_type
| struct_type
请注意,您使用的用户应该对您提供给impala的任何路径具有读写权限。您可以通过执行以下步骤来实现
#Login as hive superuser to perform the below steps
create role <role_name_x>;
#For granting to database
grant all on database to role <role_name_x>;
#For granting to HDFS path
grant all on URI '/hdfs/path' to role <role_name_x>;
#Granting the role to the user you will use to run the impala job
grant role <role_name_x> to group <your_user_name>;
#After you perform the below steps you can validate with the below commands
#grant role should show the URI or database access when you run the grant role check on the role name as below
show grant role <role_name_x>;
#Now to validate if the user has access to the role
show role grant group <your_user_name>;
更多关于角色和权限如何在这里
在创建拼花文件时,我们可以在每个行组中使用不同的模式吗?在这种情况下,页脚将合并所有行组中的所有模式,但每个行组的模式将不同。这是公认的拼花格式吗?拼花规范是否清楚地表明模式不能在同一拼花文件中按行组更改? 官方规范对这一部分不是很具体,但当我们以这种方式编写文件时,Spark无法读取。 我尝试编写这样的文件和阅读使用spark.read.parquet和我得到以下错误 <代码>组织。阿帕奇。火花
我已经使用Spark生成了一些分区拼花地板数据,我想知道如何将其映射到Impala表。。。遗憾的是,我还没有找到任何解决办法。 拼花地板的架构如下: 我用和对其进行了分区,这为我的hdfs提供了这种目录: 您知道我如何告诉Impala从这个数据集创建一个具有相应分区的表(并且不必像我读到的那样在每个分区上循环)?有可能吗? 提前谢谢你
我有一张这样的桌子: MySQL>按id限制11从MyTable顺序中选择id、书籍、章节、段落、RevisionNum; 要找到没有未修改段落的书籍或章节,我希望查询该章节或书籍的所有不同id的最大值的最小值,或者以某种方式确定没有id保持未编辑(MAX(RevisionNum)为零)。 我的大多数约会尝试都以这样的错误告终: ...而我根本就没有使用“group by”函数! 下面的查询生成结
2-查询id为1的人的所有地址,2我想: 好的方法是什么?
我们正在寻找一种解决方案,以便创建一个外部配置单元表,根据parquet/avro模式从parquet文件中读取数据。 换句话说,如何从拼花/avro模式生成hive表? 谢谢:)
问题内容: 我如何结合这两个更新语句: 问题答案: 您可以使用CASE表达式,如下所示: