小编fez*_*fez的帖子

Redshift从CTE INSERT INTO TABLE

根据Redshift WITH Clause 文档,您可以将WITH子句与INSERT INTO...SELECT语句一起使用.但是在测试时,我收到以下错误.这是不可能的,还是我的语法错了?

CREATE TABLE TestCTEInsert (SomeTimestamp TIMESTAMP);
WITH CTE AS
(SELECT GETDATE() as SomeTimestamp)
INSERT INTO TestCTEInsert
    (SomeTimestamp) SELECT SomeTimestamp from CTE;
Run Code Online (Sandbox Code Playgroud)

错误:42601:"插入"或附近的语法错误

有趣的是,它确实支持插入新表,即

WITH CTE AS
(SELECT GETDATE() as SomeTimestamp)
INSERT SomeTimestamp INTO NewTable 
SELECT SomeTimestamp from CTE;
Run Code Online (Sandbox Code Playgroud)

命令成功完成(受影响的1行)

编辑:只是为了确认,我在使用INTEGER列而不是TIMESTAMP:时得到相同的错误:

CREATE TABLE TestCTE (SomeInt INTEGER);
WITH CTE AS
(SELECT 1 as SomeInt)
INSERT INTO TestCTEInsert 
SELECT SomeInt from CTE;
Run Code Online (Sandbox Code Playgroud)

错误:42601:"插入"或附近的语法错误

sql common-table-expression amazon-web-services amazon-redshift

15
推荐指数
2
解决办法
8151
查看次数

AWS S3 cli - 标记目录中的所有对象

有没有办法使用一个put-object-tagging cli命令将标记(或一组标记)应用于S3目录中的所有对象?

即如果我有两个文件(test0.txt,test.txt)我可以运行以下两个命令:

>aws s3api put-object-tagging --bucket mybucket --key foo/bar/test0.txt --tagging 'TagSet=[{Key=colour,Value=blue}]'
>aws s3api put-object-tagging --bucket mybucket --key foo/bar/test1.txt --tagging 'TagSet=[{Key=colour,Value=blue}]'
Run Code Online (Sandbox Code Playgroud)

当尝试将文件夹本身作为--key选项传递时,我收到以下错误(因为它必须引用单个对象):

>aws s3api put-object-tagging --bucket mybucket --key foo/bar/ --tagging 'TagSet=[{Key=colour,Value=blue}]
An error occurred (NoSuchKey) when calling the PutObjectTagging operation: The specified key does not exist.
Run Code Online (Sandbox Code Playgroud)

这有解决方法吗?

amazon-s3 amazon-web-services aws-cli

7
推荐指数
3
解决办法
3759
查看次数

在AWS Redshift外部表中跳过标题行

我在S3中有一个文件,其中包含以下数据:

name,age,gender
jill,30,f
jack,32,m
Run Code Online (Sandbox Code Playgroud)

以及使用频谱查询数据的redshift 外部表:

create external table spectrum.customers ( 
 "name" varchar(50),
 "age" int,
 "gender" varchar(1))
row format delimited
fields terminated by ','
lines terminated by \n'
stored as textfile 
location 's3://...';
Run Code Online (Sandbox Code Playgroud)

查询数据时,我得到以下结果:

select * from spectrum.customers;
name,age,g
jill,30,f
jack,32,m
Run Code Online (Sandbox Code Playgroud)

是否有一种优雅的方法可以跳过标题行作为外部表定义的一部分,类似于tblproperties ("skip.header.line.count"="1")Hive中的选项?或者是我唯一的选择(至少现在)过滤掉标题行作为select语句的一部分?

amazon-web-services amazon-redshift amazon-redshift-spectrum

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

SQL Server 2012 - 如果满足条件,则更新列(CASE)否则不更新

在下面的示例中,每次运行代码块时,列"SecondColumn"和"ThirdColumn"将始终更新.'FirstColumn'将更新为存储在变量中的值@NumberOfRows(只要它> 0).

我遇到的问题是当@NumberOfRows0或更小时,'FirstColumn'将被设置为NULL.

是否可以调整此值,以便if @NumberOfRows为0或更小,那么'FirstColumn'根本不更新而不是将列设置为NULL?

DECLARE 
     @NumberOfRows INT = 0
    ,@NewValue DATETIME = GETDATE()
    ,@Other INT = 99

BEGIN
    UPDATE x
    SET  x.FirstColumn = (CASE WHEN @NumberOfRows > 0 THEN @NewValue END)
        ,x.SecondColumn = SYSDATETIMEOFFSET()
        ,x.ThirdColumn = @Other
    FROM TestTable x
    WHERE x.ID = 100
END
Run Code Online (Sandbox Code Playgroud)

sql-server case sql-server-2012

0
推荐指数
1
解决办法
297
查看次数