分离分区并移动到S3

问题描述 投票:0回答:1

我们只想保留最近三个月的数据,并将其余数据移至 S3。我正在尝试创建一个每天或每周运行的脚本。下面的脚本正确吗?

#!/bin/bash

# Define the table name and partition date format
TABLE="x"
DATE_FORMAT="%Y-%m-%d"

# Get the current date and the date 3 months ago
CURRENT_DATE=$(date +"$DATE_FORMAT")
THREE_MONTHS_AGO=$(date -d "3 months ago" +"$DATE_FORMAT")

# QuestDB SQL query to detach partitions older than 3 months
SQL_QUERY="ALTER TABLE $TABLE DETACH PARTITION WHERE timestamp < '$THREE_MONTHS_AGO';"

# Execute the SQL query using questdb's CLI or REST API (adjust accordingly)
# Assuming you can run SQL commands via the QuestDB CLI, for example:
# questdb-cli --execute "$SQL_QUERY"

# Now, move detached partitions to S3 (if needed)
# Assuming partitions are stored in /var/lib/questdb/db/x/ and end with '.detached'
for partition in $(ls /var/lib/questdb/db/x/*.detached); do
  PARTITION_NAME=$(basename "$partition")
  # Create a tarball of the partition and move it to S3
  tar -czf - "$partition" | aws s3 cp - "s3://questdb-internal/blobs/$PARTITION_NAME.tar.gz"
  
  # Optionally, remove the local detached partition after moving it
  rm "$partition"
done
database time-series questdb
1个回答
0
投票

我们可以通过一些更改使脚本变得更好。

脚本现在正在计算日期,这很好,但将其直接委托给查询可能会更容易,如下所示:

ALTER TABLE $TABLE DETACH PARTITION WHERE timestamp < dateadd('M', -3, date_trunc('day', now()))

脚本提到通过

questdb-cli
执行 SQL,但这并不是真正的事情。您可以改为向
/exec
端点发出调用:

curl -G \                                                                                                       
  --data-urlencode "query=ALTER TABLE $TABLE DETACH PARTITION WHERE timestamp < dateadd('M', -3, date_trunc('day', now()));" \
  --data-urlencode "count=true" \
  http://localhost:9000/exec

最后一件事是您的脚本现在正在使用原始分区名称上传到 S3。想象一下,您删除了一个分区,3 个月后,无论出于何种原因,您都会收到已删除分区的行。 QuestDB 将再次创建该分区。现在,三个月后,您的脚本将分离分区,并再次压缩并上传到 S3,覆盖您现有的对象,这不是您想要的。

如果这种情况不是您常规操作的一部分,并且仅由于错误或错误数据而发生,您可能需要对 S3 使用条件写入,仅在数据不存在时才发送数据。

如果您的业务中可能发生这种情况(分离分区后收到非常旧的数据),您需要确保新分区不会覆盖 S3 上的数据(可能添加一些日期后缀,或在存储桶中启用对象版本控制) ),但是在将分区重新附加到 QuestDB 时也需要小心,因为截至目前不允许合并分区。您可能需要附加其中一个分区,将分区数据移动到临时表,再次分离,附加同一数据范围中的另一个分区,然后将临时表中的数据插入该分区并删除临时表.

© www.soinside.com 2019 - 2024. All rights reserved.