伙计们我试图在insert语句下面执行并且我一直收到错误:
无法插入生成的始终标识列
声明是:
INSERT INTO leaves_approval
SELECT *
FROM requests_temp r
WHERE r.civil_number = 33322
AND r.request_id = (SELECT Max(s.request_id)
FROM requests_temp s)
Run Code Online (Sandbox Code Playgroud) 我有一个MyType类型定义如下:
create or replace type MyType as varray(20000) of number(18);
Run Code Online (Sandbox Code Playgroud)
表MyTable定义如下:
create table MyTable (
id number(18) primary key
,widgets MyType
)
Run Code Online (Sandbox Code Playgroud)
我试图使用以下SQL为MyTable中的每一行及其逻辑上前一行选择小部件:
select t.id
,lag(t.widgets,1) over (order by t.id) as widgets_previous
from MyTable t
order by t.id;
Run Code Online (Sandbox Code Playgroud)
我收到了回复:
ORA-00932: inconsistent datatypes: expected - got MYSCHEMA.MYTYPE
Run Code Online (Sandbox Code Playgroud)
如果我使用varchar或number类型的列而不是MyType运行完全相同的查询,它可以正常工作.
当前行中的列类型及其上一行必须相同,因此我只能假设它与用户定义的类型相关.
我是否需要做一些特殊的事情来使用具有用户定义类型的LAG,或者LAG是否不支持用户定义的类型?如果是后者,是否有任何其他实用功能可以提供相同的功能,或者我需要做一个传统的自我联接以实现相同的功能?
我需要行编号,其中ROW_NUMBER对于相同的值列是相同的:MFGPN(相同的MFGPN将始终按顺序).我还需要保留原始序列号.
这是我的桌子
No MFGPN
1 Z363700Z01
2 Z363700Z01
3 0119-960-1
4 1A3F1-0503-01
Run Code Online (Sandbox Code Playgroud)
我尝试使用RANK()来实现所需但遇到麻烦.
SELECT RANK() OVER(ORDER BY MFGPN) As [Item], MFGPN FROM Table1 ORDER BY [No] ASC
Run Code Online (Sandbox Code Playgroud)
结果
Item MFGPN Desired Result
3 Z363700Z01 1
3 Z363700Z01 1
1 0119-960-1 2
2 1A3F1-0503-01 3
Run Code Online (Sandbox Code Playgroud)
感谢你们的专家建议.谢谢!
我无法理解这个DISTRIBUTE BY子句在HIVE中的作用.我知道这个定义,如果我们有DISTRIBUTE BY(城市),这将使每个城市以不同的REDUCER发送,但我没有得到相同的结果.让我们考虑如下数据:
表数据:
+----------+--------+
| username | amount |
+----------+--------+
| user_1 | 25 |
+----------+--------+
| user_1 | 53 |
+----------+--------+
| user_1 | 28 |
+----------+--------+
| user_1 | 50 |
+----------+--------+
| user_2 | 20 |
+----------+--------+
| user_2 | 50 |
+----------+--------+
| user_2 | 10 |
+----------+--------+
| user_2 | 5 |
+----------+--------+
Run Code Online (Sandbox Code Playgroud)
假设我们有一个包含用户名和数量列的TABLE数据.
现在,如果我说 -
select username,sum(amount) from data DISTRIBUTE by (name)
Run Code Online (Sandbox Code Playgroud)
这不应该运行2个单独的减速器吗?它还在运行一个减速机,我不知道为什么?我认为这可能与CLUSTERING INTO BUCKETS或PARTITIONING有关但我尝试了一切,仍然运行一个减速器可以解释为什么?
这个问题最初是由@PrateekGupta提出的
@PrateekGupta想要对多个表执行批量插入操作.
表格之间有外键关系.
如果在插入引用的表之前对具有外键的表执行INSERT操作,则操作可能由于违反外键而失败.
生成根据其依赖关系排序的数据库中的表列表.
没有依赖关系的表(没有外键)将是第1个.
仅在第1组表中具有依赖关系的表将是第2个.
仅在第1或第2组表中具有依赖关系的表将是第3个.
等等...
我想从Athena的嵌套JSON创建一个表.这里描述的解决方案使用像hive Openx-JsonSerDe这样的工具尝试镜像SQL语句中的JSON数据.我只想从JSON文件中获取一些字段并创建表.我似乎无法找到任何有关如何做到这一点的资源.
例如JSON文件{"records": [{"a": "data1", "b": "data2", "c": "data3"}]}
我想创建的表只有列a和b
表stack_trace包含以下列:
val - "in"/"push"操作插入的值或"out"/"pop"操作的NULL.
目标是在每个时间点(i)找到堆栈顶部的值.
例如
(NULL值在此表示为空格)
数据:
i op val
-- -- --
1 I A
2 I B
3 O
4 I C
5 O
6 O
Run Code Online (Sandbox Code Playgroud)
要求的结果:
i top_of_stack_val
-- ----------------
1 A
2 B
3 A
4 C
5 A
6
Run Code Online (Sandbox Code Playgroud)
我们有一个范围数据集,其中每个范围都有一个起点,终点和一个值.
create table ranges
(
range_start int not null
,range_end int not null
,range_val char(1) not null
)
;
Run Code Online (Sandbox Code Playgroud)
范围可以包含另一个范围或跟随另一个范围,但不能等于另一个范围或与另一个范围相交.
这些是范围之间的有效关系:
(1) (2) (3) (4)
--------- --------- --------- -------- -----------
--- --- ---
Run Code Online (Sandbox Code Playgroud)
这些关系无效:
(5) (6)
------- --------
------- --------
Run Code Online (Sandbox Code Playgroud)
我们的初始范围,如果以图形方式显示,可能看起来像这样(字母代表range_val):
AAAAAAAA BBCCCCCCC
DDE F GGGGG
H IIII
J
Run Code Online (Sandbox Code Playgroud)
目标是获取初始范围集并在以下规则下创建新集:
包含的范围将覆盖包含范围的相应子范围.
当以图形方式呈现时,请求的结果可能看起来像这样
ADDHAAAF BIIJIGCCC
Run Code Online (Sandbox Code Playgroud)
AAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBB CCCCCCCCCCCCCCCCCCCCCCCCC …Run Code Online (Sandbox Code Playgroud) 设置textinputformat.record.delimiter为非默认值,对于加载多行文本非常有用,如下面的演示所示。
但是,在不退出cli并将其重新打开的情况下,我无法将此参数设置回其默认值。
以下选项均无效(也没有其他一些试验)
set textinputformat.record.delimiter='\n';
set textinputformat.record.delimiter='\r';
set textinputformat.record.delimiter='\r\n';
set textinputformat.record.delimiter='
';
reset;
Run Code Online (Sandbox Code Playgroud)
任何想法?
谢谢
create table mytable (mycol string);
insert into mytable select concat('Hello',unhex('A'),'world');
select concat('>>>',mycol,'<<<') as mycol from mytable;
Run Code Online (Sandbox Code Playgroud)
NewLine被解释为记录定界符,导致插入2条记录
+-------------+
| mycol |
+-------------+
| >>>Hello<<< |
| >>>world<<< |
+-------------+
Run Code Online (Sandbox Code Playgroud)
set textinputformat.record.delimiter='\0';
truncate table mytable;
insert into mytable select concat('Hello',unhex('A'),'world');
select concat('>>>',mycol,'<<<') as mycol from mytable;
Run Code Online (Sandbox Code Playgroud)
整个文本作为单个记录插入
+----------+
| mycol |
+----------+
| >>>Hello |
| world |
| <<< |
+----------+
Run Code Online (Sandbox Code Playgroud)
试图将分隔符改回换行符 …
我有以下数据样本:
| ID | 入境日期 | 目标日期 |
|---|---|---|
| ID238 | 2022-09-06 | 2022-09-06 |
| ID238 | 2022-09-06 | 2022-09-09 |
| ID238 | 2022-09-06 | 2022-09-11 |
| ID636 | 2022-09-30 | 2022-09-30 |
| ID636 | 2022-09-30 | 2022-10-03 |
| ID636 | 2022-09-30 | 2022-10-05 |
背景:在每个 ID 的第三个也是最后一个 TargetDate 之后,我需要生成截至今天日期的每周 TargetDate 行。
我想获取每个 Id 的最大目标日期,然后在该最大目标日期和 GETDATE() 之间的每个后续周添加新行。
理想的输出(粗体记录是我想要添加的行)-我知道原始目标日期不在我的查询中。我更专注于大胆的日期
| ID | 入境日期 | 目标日期 |
|---|---|---|
| ID238 | 2022-09-06 | 2022-09-06 |
| ID238 | 2022-09-06 | 2022-09-09 |
| ID238 | 2022-09-06 | 2022-09-11 |
| ID238 | 2022-09-06 | 2022-09-18 |
| ID238 | 2022-09-06 | 2022-09-25 |
| ID238 | 2022-09-06 | 2022-10-02 |
| ID238 | 2022-09-06 | 2022-10-09 |
| ID238 | 2022-09-06 | 2022年10月16日 |
| ID238 | 2022-09-06 | 2022年10月23日 |
| ID636 | 2022-09-30 | 2022-09-30 |
| ID636 | 2022-09-30 | 2022-10-03 |
| ID636 | 2022-09-30 | 2022-10-05 |
| ID636 | 2022-09-30 | 2022年10月12日 |
| ID636 | 2022-09-30 | 2022年10月19日 … |