我在 Athena 中成功创建了数据库表。请参阅下面的查询。
CREATE EXTERNAL TABLE IF NOT EXISTS s3_access_logs_db.wafbucket_logs(
BucketOwner STRING,
Bucket STRING,
RequestDateTime STRING,
RemoteIP STRING,
Requester STRING,
RequestID STRING,
Operation STRING,
Key STRING,
RequestURI_operation STRING,
RequestURI_key STRING,
RequestURI_httpProtoversion STRING,
HTTPstatus STRING,
ErrorCode STRING,
BytesSent BIGINT,
ObjectSize BIGINT,
TotalTime STRING,
TurnAroundTime STRING,
Referrer STRING,
UserAgent STRING,
VersionId STRING,
HostId STRING,
SigV STRING,
CipherSuite STRING,
AuthType STRING,
EndPoint STRING,
TLSVersion STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*)
\\[(.*?)\\] …Run Code Online (Sandbox Code Playgroud) 所以这个 SQL 对相册中的页面进行排序,在添加新上传的页面后调用它,它更新序列顺序:
UPDATE Gallery.AlbumAsset
SET
Sequence = X.Rank
FROM Gallery.AlbumAsset albass
INNER JOIN
(
SELECT TOP 100 PERCENT
Rank() OVER (Order By Sequence, AssetId) As Rank, AssetId
FROM Gallery.AlbumAsset
WHERE AlbumId = @AlbumId and Sequence > 0
ORDER BY Rank
) X ON albass.AssetId = X.AssetId AND albass.Sequence != X.Rank
WHERE albass.AlbumId = @AlbumId
Run Code Online (Sandbox Code Playgroud)
我认为 TOP 100 PERCENT 令人困惑,并且对于可读性来说不是最佳的,所以我尝试进行更改:
UPDATE Gallery.AlbumAsset
SET
Sequence = X.Rank
FROM Gallery.AlbumAsset albass
INNER JOIN
(
SELECT
Rank() OVER (Order By Sequence, AssetId) As …Run Code Online (Sandbox Code Playgroud) 我有一个包含实体的数据库,如下所示:
1. User entity
2. Event entity (musical concert etc.)
3. Ticket entity
3. Notification entity
Run Code Online (Sandbox Code Playgroud)
我一直在思考三种可能的解决方案:
a) 通知实体具有以下结构:
id serial PRIMARY KEY,
.
.
ticketId integer REFERENCES tickets(id),
eventId integer REFERENCES events(id))
userId integer REFERENCES users(id) // this is present in all three solutions;
Run Code Online (Sandbox Code Playgroud)
这样,Notification 实体就拥有两个外键,但一次只填充其中一个(eventId 或 TicketId),另一个永远为空。
b) 通知实体仅具有与通知本身相关的列,它不包含任何外键(userId 除外)。
关系被提取到另外两个具有此结构的关系映射表中(对于通知-工单关系,同样适用于通知-事件,除了外键引用事件):
id serial PRIMARY KEY,
notificationId integer REFERENCES notifications(id),
ticketId integer REFERENCES tickets(id));
Run Code Online (Sandbox Code Playgroud)
这样,我们创建了类似接口的东西,并且不让通知实体知道任何有关关系的信息(它只有与通知本身和 userId 相关的属性),并且我们还有两个映射关系的附加表。
c) 将Notification实体分成两个不同的实体
(TicketNotification、EventNotification),每个实体具有相同的属性,但外键列不同。
- TicketNotification - …Run Code Online (Sandbox Code Playgroud) 在Snowflake文档中,我找不到使用索引的引用。
Snowflake是否支持索引,如果不支持,在使用Snowflake时性能调整的替代方法是什么?