小编Vam*_*ala的帖子

通过Spark加载的表无法在Hive中访问

无法通过Hive访问通过Spark(pyspark)创建的Hive表。

df.write.format("orc").mode("overwrite").saveAsTable("db.table")
Run Code Online (Sandbox Code Playgroud)

从Hive访问时出错:

错误:java.io.IOException:java.lang.IllegalArgumentException:bucketId超出范围:-1(状态=,代码= 0)

在Hive中成功创建表,并能够在Spark中读取该表。表元数据可访问(在Hive中),数据文件在表(在hdfs中)目录中。

Hive表的TBLPROPERTIES是:

  'bucketing_version'='2',                         
  'spark.sql.create.version'='2.3.1.3.0.0.0-1634', 
  'spark.sql.sources.provider'='orc',              
  'spark.sql.sources.schema.numParts'='1',
Run Code Online (Sandbox Code Playgroud)

我还尝试了使用其他解决方法创建表,但在创建表时出错:

df.write.mode("overwrite").saveAsTable("db.table")
Run Code Online (Sandbox Code Playgroud)

要么

df.createOrReplaceTempView("dfTable")
spark.sql("CREATE TABLE db.table AS SELECT * FROM dfTable")
Run Code Online (Sandbox Code Playgroud)

错误:

AnalysisException:u'org.apache.hadoop.hive.ql.metadata.HiveException:MetaException(由于以下原因,message:Table default.src未能通过严格的托管表检查:将该表标记为托管表,但不是事务性表。) ;'

堆栈版本详细信息:

火花2.3

Hive3.1

Hortonworks数据平台HDP3.0

hadoop hive hortonworks-data-platform apache-spark pyspark

6
推荐指数
1
解决办法
1766
查看次数

根据第三列动态选择两列中的一列

我有3个表,让我们说表A,B,C来混淆我的软件:).A和B有两列数字值,表C有一列布尔列.

我想要的是创建一个具有单个列的视图,其中根据C中的列,选择A或B中的值.

例:

输入:

        | A.val |    | B.val |    | C.val |
        ---------    ---------    ---------
entry1  |   1   |    |   6   |    |   T   |
entry2  |   2   |    |   8   |    |   F   |
Run Code Online (Sandbox Code Playgroud)

输出:

       | D |
       -----
entry1 | 1 |
entry2 | 8 |
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法在SQL语句中执行此操作,因为我目前正在以编程方式执行此操作,这会占用不必要的资源.

sql postgresql

5
推荐指数
1
解决办法
1209
查看次数

几行之间的 SQLite SUM()

我需要一些有关 Android 应用程序中 SUM 功能的帮助。我有一张类似于以下内容的表:

在此处输入图片说明

我需要SUM在最后两条记录 Notes 和最后一条带 Note 记录之间的数量。我需要对第 31,32 和 33 行的数量求和。它会返回 90。我试过了

SELECT Sum(QUANTITY) FROM fuel_table WHERE NOTE!='' ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)

但它返回带注释的所有数量的总和。

sql sqlite android

5
推荐指数
1
解决办法
902
查看次数

SQLite 中的转义表名?

我在 SQLite 中有名为 References 的表,所以我似乎无法定位它。我用来编辑数据库的 SQLite Studio 会引发错误。

有没有办法转义数据库名称?

查询是:

UPDATE References 
SET DateTimeLastEdited = datetime('now', 'localtime')
WHERE NewsItemID = old.NewsItemID;
Run Code Online (Sandbox Code Playgroud)

(这是我正在制作的触发器的一部分。)

sql database sqlite escaping

5
推荐指数
1
解决办法
4129
查看次数

SQL 使用字符串函数提高索引列性能

我有一个关于使用字符串函数及其对性能的影响的一般性问题。我有一个表,其列 ID 上有非聚集索引。该列中有 20 位 varchar。当我跑步时:

SELECT col1, col2 
FROM tbl
WHERE ID = '00000000009123548754' 
Run Code Online (Sandbox Code Playgroud)

结果很快就回来了。但当我跑步时

SELECT col1, col2 
FROM tbl
WHERE RIGHT(ID, 10) = '9123548754'
Run Code Online (Sandbox Code Playgroud)

这需要很长时间。第一个查询的估计执行计划有一个索引查找,而第二个查询的估计执行计划有一个索引扫描。

我知道 Seek 相对于 Scan 是更快的原因,但为什么 String Function Right() 会产生如此大的影响?

sql sql-server indexing performance sql-server-2005

5
推荐指数
1
解决办法
931
查看次数

在 hive 中的 collect_list() 中排序

假设我有一个看起来像这样的蜂巢表:

ID    event    order_num
------------------------
A      red         2
A      blue        1
A      yellow      3
B      yellow      2
B      green       1
...
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 collect_list 为每个 ID 生成事件列表。所以类似于以下内容:

SELECT ID, 
collect_list(event) as events_list,
FROM table
GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)

但是,在我分组所依据的每个 ID 中,我需要按 order_num 进行排序。这样我的结果表将如下所示:

ID    events_list
------------------------
A      ["blue","red","yellow"]
B      ["green","red"]
Run Code Online (Sandbox Code Playgroud)

我无法在 collect_list() 查询之前按 ID 和 order_num 进行全局排序,因为该表很大。有没有办法在 collect_list 中按 order_num 排序?

谢谢!

hive hiveql

5
推荐指数
1
解决办法
8283
查看次数

每个项目至少有一个分组

假设我有一个匹配person_ids 到pets的表。我有一份房主必须拥有的理想宠物清单(至少每只宠物之一),从下表中,我想看看谁符合要求。

该列表当然是(dog, cat, tiger). 人们绝对可以拥有不止一种,但这些都是必不可少的(因此person_id = 1是唯一有效的)。

+---------+-----------+--------+
| home_id | person_id |  pet   |
+---------+-----------+--------+
|       1 |         1 | dog    |
|       2 |         1 | dog    |
|       3 |         1 | cat    |
|       4 |         1 | tiger  |
|       5 |         2 | dog    |
|       6 |         2 | cat    |
|       7 |         3 | <null> |
|       8 |         4 | tiger …
Run Code Online (Sandbox Code Playgroud)

sql postgresql select relational-division

4
推荐指数
1
解决办法
5192
查看次数

MySql:日期(字符串)周围的引号如何影响结果?

用 ^ 标记的两个查询之间的差异

SELECT COUNT(*) 
FROM customers_reports AS cr 
JOIN customers_docs on customers_docs.customerId=cr.customerId 
WHERE cr.firstDepositDate >= 2015-12-01  AND customers_docs.docs = "None";
Run Code Online (Sandbox Code Playgroud)

该查询返回 2 个结果。

SELECT COUNT(*) 
FROM customers_reports AS cr 
JOIN customers_docs on customers_docs.customerId=cr.customerId 
WHERE cr.firstDepositDate >='2015-12-01' AND customers_docs.docs = "None";  
                            ^          ^                                                                                                                                        
Run Code Online (Sandbox Code Playgroud)

虽然此查询返回 30,000 个结果。

有人可以解释为什么吗?

mysql sql

4
推荐指数
1
解决办法
2199
查看次数

选择多个最大值

我在 mysql 数据库上有一个这样的表:

id | item
-----------
1  | 2
2  | 2
3  | 4
4  | 5
5  | 8
6  | 8
7  | 8
Run Code Online (Sandbox Code Playgroud)

我希望结果是具有最高 Item 值的 3 条记录

select max(item) 只返回 1 个值,如何选择多个最大值?谢谢你

mysql sql

3
推荐指数
1
解决办法
4515
查看次数

如果条件延长时间,则Oracle查询不返回结果

如果我做:

SELECT count(*) FROM XX where "date" >= '8-APR-2015' and "date" <= '8-APR-2016'
Run Code Online (Sandbox Code Playgroud)

它将返回许多行,但如果我这样做:

SELECT count(*) FROM XX where "date" >= '8-APR-2010' and "date" <= '8-APR-2016'
Run Code Online (Sandbox Code Playgroud)

它返回0.这怎么可能?如果有什么我会得到更多的行,因为我正在增加有效的检索范围.有任何想法吗?

编辑:

NLS_TIMESTAMP_FORMAT 'DD-MON-RR HH.MI.SSXFF 
NLS_DATE_FORMAT DD-MON-RR
Run Code Online (Sandbox Code Playgroud)

sql database oracle

3
推荐指数
1
解决办法
76
查看次数