我有以下场景:几个csv文件包含同一个表的不同列。我可以用某种方式填充红移表吗?理想情况下,可以借助数据管道吗?我找不到实现这一目标的方法。有人能帮忙解决这个问题吗?如果可能的话,可以举个简单的例子。您可以在加载csv文件之前将其转换为json格式。然后在文件中找不到特定的Json标记:copy只会将其删除。据我所知,在copy语句的情况下,它将允许您使用清单文件将多个文件加载到一起,但具有相同的列顺序。如果列顺序不同或列数不同,您可能希望分别加载它们。
我不想删除一个表并将其重新创建为diststyle,而是想更改表的diststyle,这可能吗
谢谢 似乎不可能。从旧表重新创建填充表更容易。我发现的最简单的方法是使用以下方法:
BEGIN;
CREATE TABLE mytable_tmp
DISTSTYLE ALL -- You can also use DISTKEY(some_column) or DISTSTYLE EVEN
AS SELECT * FROM mytable;
DROP TABLE mytable;
ALTER T
如果我在红移中有一个像‘Picá’这样的字符串,我怎么能只提取‘a’
尝试获取一列字符串中的外来字符计数。如果需要非ascii字符计数,可以使用
select regexp_count('Picá', '[^\u0000-\u007F]');
它返回值1
如果你真的想要一个拉丁或西里尔字母的计数,那么你可能必须恢复到红移UDF。你能更具体地说,你如何定义外来字符?与什么无关?主要是[A-Z]、[A-Z]、[0-9]和标点符号之外的任何东西。更具体地说,如果你看这里:。它是拉丁或西里尔字母表中的
我想使用红移中的用户定义函数在红移中实现mySQL IF函数等效。语法如下:
IF(条件、值如果为真、值如果为假)
是否可以将条件/表达式传递给Redshift UDF?不能将表达式传递给UDF,但可以传递字符串。然后可以用python对其进行计算
然而,更简单的方法是使用case语句
case {condition} then {value_if_true} else {value_if_false} end
case语句是SQL中的标准语句(如果不是,则为wheras)
我知道什么时候应该
我以前也研究过其他解决方案,但从解释中找不出问题所在。我正在尝试运行一个python脚本,其中数据从oltp MySQL数据库(AWS RDS)加载到AWS Redshift上的olap数据库。我已将我的表定义为红移,如下所示:
create_product = ("""CREATE TABLE IF NOT EXISTS product (
productCode varchar(15) NOT NULL PRIMARY KEY,
productN
我正在寻找SQL代码,它可以列出模式名和表名以及组名。这是为了找出哪个模式名或表名属于哪个组。通过下面的代码,我可以很容易地找到哪个用户在哪个组中,而不是模式名和表名。有没有办法将pg_名称空间与pg_组连接起来
SELECT usename, groname
FROM pg_user, pg_group
WHERE pg_user.usesysid = ANY(pg_group.grolist)
AND pg_group.groname in (SELECT DISTINCT pg_grou
对于AmazonRedshift,通常使用“copy”命令从S3加载数据。我想知道这个命令是不是原子的。例如,在某些例外情况下,是否可能只将部分数据文件加载到红移表中?您可以在加载数据之前使用NOLOAD标记检查错误。这是一种更快的验证数据格式的方法,因为它不尝试加载任何数据,只需解析数据
您可以使用MAXERROR标志定义您愿意容忍的错误数量
如果您的计数超过了MAXERROR计数,则加载将失败,并且不会添加任何记录
请参阅此处的详细信息:带有默认选项的复制命令是原子的。如果文件包含可能导致加
我正在设置红移并从mongo导入数据。我已经成功地将json路径文件用于一个简单的文档,但现在需要从包含数组的文档导入
{
"id":123,
"things":[
{
"foo":321,
"bar":654
},
{
"foo":987,
"bar":567
}
]
}
如何将上述内容加载到如下表中:
select * from things;
我需要将存储在bigint列中的值转换为日期字段。转换的第一步涉及将其转换为时间戳,然后使用TRUNC方法将此列转换为日期值。
但是,我的查询在将bigint值转换为timestamp时失败。
我得到的错误是:-
Amazon无效操作:无法将类型bigint强制转换为没有时区的时间戳
我现在尝试的查询是这样的:-
从事件限制1中选择ts::timestamp
如果您从POSIX时间戳开始,并试图获得一个时区感知的datetime值,那么您将需要提供一个时区-即使您以后想要截断时间部分。我不熟悉红
我注意到,如果以红移方式重命名一个表,那么新名称将自动应用于基于该表的所有视图
是否有办法防止这种行为,使视图定义包含旧表名?Mihai
这是一个极好的问题
当您手动执行表维护并且希望在不影响现有从属对象的情况下移动/创建/重命名表时,您正在搜索的功能将非常有用
对你的问题的简短回答是“不”。没有办法防止红移中出现这种行为
在“ALTERTABLE”语句或“CREATEVIEW”语句上,都无法防止在基础表更改时更改依赖视图
但是
在更改名称之前,您可以很容易地获得视图的DDL,并且可以在准备就绪
我在S3上有以下JSON文件结构:
{
"userId": "1234",
"levelA": {
"LevelB": [
{
"bssid": "University",
"timestamp": "153301355685"
},
{
"bssid": "Mall",
"timestamp": "153301355688"
}
]
}
}
现在,我们未
我有许多表,其中所有行都已从中删除。然后我在这些表上运行了一个真空吸尘器,但它们仍然显示为占用磁盘空间。你知道为什么会这样吗。谢谢。如果要删除红移表中的所有行,请执行截断操作,而不是删除操作
此外,如果您不打算保留该表,或者您知道永远不会再填充它们,只需删除它们。记住,放下一张桌子会带走所有的特权和授权
说到你的问题,我也遇到过这种情况。我希望您正在查询系统表以获得表大小的近似值。给一些时间红移以稳定,然后再次运行查询以检查磁盘空间。该表占用的空间应为0,或者该表不希望出现在结果集中,这表示已释
我想知道执行查询需要多长时间,这样我就可以看到我的更改是否改善了运行时
简单地为整个查询的执行计时是不合适的,因为这还考虑了在执行队列中等待的时间(高度可变)
Redshift提供的表包含队列等待时间和执行时间的单独列。但是,我的查询不能可靠地显示在此表中。例如,如果我多次执行同一个查询,STL_WLM_查询中相应行的数量通常比重复的数量小得多。有时,但并非总是,无论我多久运行一次查询,都只生成一行。我怀疑正在进行缓存
有没有更好的方法来确定红移查询的实际执行时间,或者至少有人能解释一下在什么情
我试图将数据从S3 bucket加载到redshift表中,表中有一列作为源id,我想将源文件所在的文件夹名存储到该列中
实际上,我在S3 bucket中有多个文件夹,每个文件夹中有一个文件,我使用红移中的copy命令将所有文件移植到同一个表中,以便识别数据来自哪个文件夹,所以我需要将文件夹名称和数据存储到红移表中,我在表中有单独的列作为源id
任何人都可以帮助我。如果您使用的是红移复制命令,那么除了导入每个文件夹(例如,作为临时表)然后手动将值设置为还原文件夹的值之外,您别无选择。对每个文件夹
我对使用窗口函数没有太多经验,因此我很好奇除了执行连接之外,是否还有其他执行以下操作的方法:
SELECT se.user_id, se.session_id
FROM session_events AS se
WHERE se.session_order <
(SELECT DISTINCT se1.session_order
FROM session_events AS se1
WHERE se.user_id = se1.user_id AND se1.e
我是红移新手。我不知道哪一列适合设置分发密钥以提高查询性能。如何找到最好的专栏?以及如何使用dist key将数据分布在节点上 这是一个非常广泛的问题,很难给出你的简短答案。无论如何,让我在这里总结一下,在红移中有两种类型的键,distkey和sortkey。
distkey—表的distkey是将其分发到每个节点的列。此列中具有相同值的行保证位于同一节点上
sortkey—表的sortkey是在每个节点中按其排序的列。它应该应用于您通常按顺序执行的列
让我们在这里关注distkey
分发密钥可
我想识别我的红移用户对模式中的各种对象拥有的所有授权,我正在使用下面的代码,但是得到了错误
SELECT
u.usename,
t.schemaname||'.'||t.tablename,
has_table_privilege(u.usename,t.tablename,'select') AS user_has_select_permission
FROM
pg_user u
CROSS JOIN
pg_tables t
WHERE
u.us
我正在尝试将AWS EMRdata存储中的数据作为S3加载,并将metastore的目录粘附到Redshift
import sys
import boto3
from datetime import datetime,date
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from awsglue.context import GlueContext
from awsglue.job
为了删除数据库,是否可以删除与红移的活动连接
在我的开发环境中,我发现自己非常频繁地重新创建模式,如果碰巧有一些游离的进程连接到数据库,这将失败。我知道Postgresql可以使用pg\u terminate\u backend来实现这一点,但这在红移上似乎不起作用
从STV_SESSIONS表中删除行也不是一个选项
有什么想法吗?
查找当前正在运行的查询的PID
select pid from stv_recents where status = 'Running';
并使用终止所有查询
我试图从一个具有多种日期格式的平面文件中获取一个红移表,这会导致插入空值。我的insert命令如下所示:-
echo "COPY xxscty.daily_facebook_campaign from '${S3_BUCKET}/Society/20140701_20150315_campaign.csv' credentials as 'aws_access_key_id=${ACCESS_KEY};aws_secret_access_key=${SECRET_KEY}' acceptanyd
我有两张桌子。表A是一个操作存储,表B是目标表
表A DDL:
A列Varchar(1000)
表B DDL:
B列Varchar(250)
因此,我尝试插入截断列A,如下所示:
插入表B(选择左侧(表a.a列,249)),但它给出了错误
“错误:字符类型的值太长”
我也尝试过使用子字符串来截断文本,但没有效果。请注意,A列中也有阿拉伯文文本,但在表A中没有问题
如有任何帮助/建议,将不胜感激 问题在于,由于红移是Unicode DB,每个阿拉伯符号占用的字节数超过1个。varchar定义以字节
我在给定的列中有一个逗号分隔的文本。有没有办法得到最后一个、倒数第二个和倒数第三个值
select mnumber from mytable limit 2;
x, y, z, 1, 2, 3
a, b, c, d, e, f, g, h, 7, 8, 9
从该列返回的值应该如下所示
col3, col2 col1
1 2 3
7 8 9
但这不起作用:
split_part(mnumber,',',-1) as last_col
如果split_part函数中允许负值,它将返回我需要的
我有一个红移集群,只有一个dc1.1大型节点。我已经将数据写入其中,每天有5000万条记录,格式为时间戳、用户ID和项目ID。项目ID(varchar)是唯一的,用户ID(varchar)不是唯一的,时间戳(timestamp)不是唯一的
在我的大约110m记录的红移数据库中,如果我有一个没有排序键的表,搜索单个项目ID大约需要30秒
如果我有一个表,它的条目ID上有一个排序键,那么我得到的单个条目ID搜索时间大约为14-16秒
如果我有一个表,其中包含所有三列的交错排序键,则单个项目ID的搜索
我试图在redshift->检查查询是否返回任何记录中实现以下功能,如果是,则运行另一个查询并返回结果,如果不是,则引发错误并使主查询失败。以下是它在sql server中的工作方式:
IF exists (SELECT * from [TABLE] where COLUMN1 = 'ABC')
SELECT [COLUMN2] from [TABLE] where COLUMN1 = 'ABC'
ELSE RAISERROR ('Error',16, 1);
我在使
我试图使用exception block和内置变量redshift将存储过程的错误日志存储在自定义错误表中
DECLARE
name emp.ename%TYPE;
v_code NUMBER;
v_errm VARCHAR2(64);
BEGIN
SELECT ename INTO name FROM emp WHERE empno = 1000;
EXCEPTION
WHEN OTHERS THEN
v_code :=
如果不使用管理员用户(具有超级用户访问权限)将更改部署到红移群集,则希望创建一个组,该组将具有部署更改的权限,并且可以将该组分配给部署团队。
但是,如果不成为视图的所有者或超级用户,就无法修改视图。是否有任何方法可以在不授予超级用户对开发/devops团队的访问权的情况下完成部署(包括更改表/更新现有视图-而不更改其所有权)?您可以从任何用户创建视图/表,然后使用grant ALL ON table\u或\u view\u name向这些视图/表授予ALL权限,以部署用户或组。您可以从任何用户创
我有两个红移的表格-t1和t2
t2已包含约30万条记录
t1包含约10000条记录
我需要根据id字段删除t1中已经存在于t2中的所有记录
为此,我将执行以下查询(其中一个):
或
或
在我对真实数据执行此操作之前,我想问一下——从性能角度来看,在红移中使用此类查询是一个好主意,还是有其他(更好的)技术用于此类情况?执行此操作的最大性能因素将是t1和t2的分布,而不是查询结构。这些表是否基于列id的键分布
尽管如此,我还是建议您使用“delete-using”结构。所有这些查询都将t1和t2连
在插入AWS红移时,我得到以下错误:
无效数字,值“E”,位置0,类型:长
原因可能是什么?请编辑您的问题,将您正在运行的命令包括在内。
亚马逊在红移账单上说了以下几点
节点使用小时数按数据仓库群集在可用状态下运行的每小时计费。如果不再希望为数据仓库群集收费,则必须终止该群集,以避免为额外的节点小时数计费
这意味着,如果我只是创建了一个集群,无论是否使用它,我都将被24/7计费,因为集群没有任何类似“挂起”的状态。有没有一种方法可以在不使用时关闭整个Redshift服务器,这样我就只需要在需要使用集群的时间内付费
编辑:根据Tomasz的回复,听起来如果我想在周末关闭集群,就像在周五晚上备份整个数据库,在周日晚上恢复一样。这听起来
我需要为一个报告创建一个空的时间表序列,这样我就可以将多个表中的join活动留给它。一天中的每个小时不一定都有数据,但我希望它在不活动时显示null或零,而不是忽略一天中的那个小时
在后期版本的Postgres post 8.0.2中,这在以下几个方面都很简单:
选择unnestarray[0,1,2,3,4…]作为数字
或
交叉连接选择按小时生成_系列
从generate_seriesnow::timestamp,
现在::时间戳+间隔“1天”,
“1小时”:间隔
日期系列
Redshift可
我使用临时暂存表TempStaging来进行一些合并。主表MainTable的某些列中的数据用lzo编码,比如C1。合并输出返回MainTable
为了确保TempStaging使用相同的dist键,我使用createtable创建它。由于某些原因,我不能使用createtable作为
那么我应该把C1列编码成lzo吗?还是不编码?红移会不会短路[在从MainTable选择时解码,在写入TempStaging时编码,在从Tentable进行合并时解码,在写入MainTable时再次编码]
因为我
使用Regexp_substring()查找单词“OF”(第一次出现)前面的单词。以下代码不起作用,因为红移似乎不支持非贪婪模式匹配
请帮忙
select regexp_substr('SAFETY COUNCIL OF PALM BEACH COUNTY, INC. ','[[:print:]].*?\\sOF\\s')
Query execution failed
Reason:
SQL Error [XX000]: ERROR: Invalid preceding regular ex
标签: Amazon Redshift
aws-glueaws-glue-data-catalogaws-glue-sparkspark-redshift
我已经通过glue job动态创建了一个表,它成功地运行良好。但根据新的要求,我需要添加一个新的列,该列生成唯一的值,并且应该是红移中的主键。
我已经使用rownum()函数实现了同样的功能,它工作得很好。但最新的要求是特定列应该是主键
When I try to do that, it asks the column to have not null. Do you know how to make the column not null dynamically through glue jo
如何在Amazon Redshift中获取表的标识列列表?使用系统的表
谢谢。该表包含有关表和列的信息:
select * from pg_table_def where tablename = 't2';
schemaname|tablename|column| type | encoding | distkey |sortkey| notnull
----------+---------+------+---------+----------+---------+-------+--
删除表后,redshift是否会回收可用磁盘空间,或者我们是否需要运行vaccum。删除表释放空间
若您正在对表的行执行删除操作,那个么应该触发vaccumm delete only命令
红移时升降台无需启动真空
激发下面的命令以检查表放置前后的数据库大小,查看是否获得空间
select sum(mbytes)/1024 as db_size_in_gb, database from (
select trim(pgdb.datname) as Database,
trim(a.name) as
团队,
您能否帮助我获取sql查询以了解以下内容:
1) 我将“在语言PLPYTHONU上的用法”授予数据库TESTDB1上的TESTUSER1。如何确定该用户是否在特定的DB testdb1中被授予此权限
testdb1=>grant USAGE ON LANGUAGE PLPYTHONPU to testuser1;
2) 我将一个函数的执行权限授予TESTUSER1。如何查找此用户是否在特定的db testdb1中授予此权限
testdb1=> grant execute o
获取以下代码以尝试清除表中的重复项:
DELETE FROM events a
WHERE a.ctid <> (SELECT min(b.ctid)
FROM events b
WHERE a.eventid = b.eventid and
left(b.eventtimestamp,10)='2016-01-15');
它反对这个别名。我试过不同的名字,我试过插入AS关键字,都没有
在允许其他连接执行SELECT操作的事务中,如何对表执行锁写入
执行此操作时:
BEGIN;
LOCK TABLE my_table;
<very long commands>
开始;
锁桌我的桌子;
其他连接无法执行从my_表中选择计数(*)之类的选择操作
我想要实现的是在我写的时候阻止其他人写,而不阻止他们读。在事务块中锁定表,将不允许其他用户/会话读或写该表。
如果希望事务是只读的,可以使用以下语法
BEGIN [READ ONLY];
<very long comm
我想使用ApacheNIFI将数据从vertica传输到redshift。
我需要设置哪些处理器和配置?如果Vertica和Redshift有“性能良好”的JDBC驱动程序,您可以为每个驱动程序设置一个,然后设置一个SQL处理器,例如,或(后者生成SQL以在ExecuteSQL中使用)。这些将把您的记录转换成Avro格式,然后(在NiFi 1.2.0之前)您可以使用->->将您的记录插入红移
在NiFi 1.2.0中,您可以使用设置用于PutDatabaseRecord的AvroReader。然
我们正在红移集群上运行一些每小时一次的脚本,这些脚本为数据使用者构建汇总表。组装暂存表后,脚本将运行一个事务,删除现有表并将其替换为暂存表,如下所示:
BEGIN;
DROP TABLE IF EXISTS public.data_facts;
ALTER TABLE public.data_facts_stage RENAME TO data_facts;
COMMIT;
ALTER TABLE public.data_facts RENAME TO data_facts_old;
AL
我试图在我们的亚马逊红移中创建视图。问题是,一些基表还没有由我的合作伙伴创建,所以我希望在没有它们的情况下创建视图
我发现Oracle有一个FORCE关键字来解决这个问题。然而,红移似乎没有它(或者我用错了)
创建或替换强制视图…返回语法错误
如何在没有基表的情况下创建视图?您需要创建“没有模式绑定”的视图
这将创建一个“后期绑定视图”,它不检查底层数据库对象,例如表和其他视图
请参阅此处的AWS文档请从标题中删除PostgreSQL,因为它与此问题的红移完全不同。
红移表不支持每个信息消息一个指定类型或函数
我犯了这个错误。当它通过PyCharm发生时,我无法理解信息的另一部分。但当我直接在终端中运行它时,我收到了一条消息,就在错误出现之前,它说INFO:Function now not supported
似乎我现在可以使用,但只能在静态查询中使用。如果我在查询中包含一个数据库表,那么它不起作用
这项工作:
WITH cteDates AS (
SELECT
(now() - interval '7 da
在AWS红移中,我可以使用pg\u terminate\u后端(pid)终止查询命令
问题是,只有在通过查询stv_recents表运行查询后,才能获得pid
这给自动化带来了一个问题——如何以编程方式终止查询(可能是因为它超出了时间限制)?就我所见,我可以通过过滤查询、用户和开始时间列(在pid中)来获得pid。问题是,所有查询都来自应用程序用户(同一用户),有些用户可能执行相同的查询
是否有任何方法可以在执行查询时/之后命中某种类型的回调并获取pid?否则,如何自动取消查询
提前感谢。我已经
在AmazonRedshift中有一个有趣的情况,我有一个用户X,他对模式公共中的所有表都授予select权限,但是一旦创建了一个新表,这个权限似乎就不适用于新表。这是正常的行为吗?如果是,如何处理它,以保持模式级别的授权。谢谢。这是正常的行为。默认情况下,只有对象所有者/超级用户有权使用该对象
您可以将grant命令添加到create table语句中,并为用户授予所需的权限。在红移中,表和视图不会自动继承其父架构的权限。新创建的表只能由创建它们的用户和超级用户访问
在最近的一个红移补丁中,实
在我的公司,我们的大多数数据库都存储在红移服务器上,只有连接到公司VPN才能访问这些服务器
此外,我们的大多数内部公司软件包只能与VPN一起运行。因此,我想创建google colab文档,我可以与同事共享这些文档,但这些文档依赖于本地安装的软件包和到VPN的活动连接
这可能吗/有解决方法吗?Colab现在支持使用本地后端执行!您可以按照以下说明开始操作:
默认情况下,Colab将所有代码单元输出存储在Google Drive中。如果您的本地连接将访问敏感数据,并且您希望忽略这些数据,则可以在连
红移中的命令没有IF EXISTS子句
这很奇怪,因为DROP USER确实有这样一个子句
我如何才能清晰地编写创建用户和组的脚本,如果存在组,则删除这些组?您如何编写脚本?您的脚本语言是否包含逻辑(IF)或错误处理?为什么你不能只运行DROP GROUP?如果我只运行DROP GROUP,我有时会收到一条消息说该组不存在。如果在上一次运行脚本时删除了组,但脚本随后失败,我必须再次运行,则可能会发生这种情况。是的,但是如果DROP group返回错误,是否会导致特定问题?即使脚本语言出现错误,它
我有红移的多路径方案,它们彼此相似
基本上,为每个新客户创建一个新方案
在每个方案中,我都有products表:product\u id、product\u name
我有一个视图显示了scheme\u name和scheme\u id
我需要创建一个视图,该视图将显示所有产品标识和产品名称,并在其旁边显示方案标识
因此,在最后,我将有一个视图,其中包含来自所有方案的所有产品和方案id,以便我知道它属于哪一个
如何为其创建动态视图?在数据库中,先指定模式,然后指定“.”再指定表
e、 g
您可以
使用psycopg连接到我试图按日期分组的红移数据库(在查询时给定的特定时区)。所有日期时间都存储在没有时区的位置(并与UTC时间戳相对应)
我一直在尝试以下方法:
选择不同的日期(时区(%(时区)s,日期时间戳))作为日期,
总糖的总和(餐用糖)
饭后
内部连接日期\时间\尺寸
用餐时。创建时间=日期时间dim.timestamp
用餐地点。患者id=%(患者id)s
和日期时间dim.timestamp>=%(utc开始日期时间)s
和date\u time\u dim.timestamp红
我有一些GB的数据要传输到ES。我知道一种方法,首先将数据从红移转储到S3,然后再转储到ES
还有别的办法吗。你可以检查一下
供参考:您可以检查此项
供参考:
在红移中,只能将一列指定为排序键。我想知道为什么面向列的DBMS会有这样的限制
假设我有一张这样的桌子:
rowid name age
1 Kevin 20
2 Jill 35
3 Billy Bob 19
Kevin:1,Jill:2,Billy Bob:3
20:1,35:2,19:3
在内部,DB将分别存储每个列,可能如下所示:
rowid name age
1 Kevin
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 19 页