无法通过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
我有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语句中执行此操作,因为我目前正在以编程方式执行此操作,这会占用不必要的资源.
我需要一些有关 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)
但它返回带注释的所有数量的总和。
我在 SQLite 中有名为 References 的表,所以我似乎无法定位它。我用来编辑数据库的 SQLite Studio 会引发错误。
有没有办法转义数据库名称?
查询是:
UPDATE References
SET DateTimeLastEdited = datetime('now', 'localtime')
WHERE NewsItemID = old.NewsItemID;
Run Code Online (Sandbox Code Playgroud)
(这是我正在制作的触发器的一部分。)
我有一个关于使用字符串函数及其对性能的影响的一般性问题。我有一个表,其列 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() 会产生如此大的影响?
假设我有一个看起来像这样的蜂巢表:
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 排序?
谢谢!
假设我有一个匹配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) 用 ^ 标记的两个查询之间的差异
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 数据库上有一个这样的表:
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 个值,如何选择多个最大值?谢谢你
如果我做:
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 ×8
database ×2
hive ×2
mysql ×2
postgresql ×2
sqlite ×2
android ×1
apache-spark ×1
escaping ×1
hadoop ×1
hiveql ×1
indexing ×1
oracle ×1
performance ×1
pyspark ×1
select ×1
sql-server ×1