【问题标题】:How can we make cbt commands rerunnable我们如何使 cbt 命令可重新运行
【发布时间】:2021-03-02 13:26:52
【问题描述】:

我必须以可重新运行的格式保存 cbt 脚本。我们在 bigtable 中是否对此提供支持。

cbt createtable 移动时间序列

我们可以像保存在mysql中那样以这种格式保存脚本吗

cbt createtable IF NOT EXISTS mobile-time-series

【问题讨论】:

    标签: google-cloud-bigtable bigtable


    【解决方案1】:

    如果您对已经存在的表使用createtable 命令,它只会提供一个错误提示该表存在,因此您可以在现有表上调用它而不会产生任何后果:

    Creating table: rpc error: code = AlreadyExists desc = Table already exists: projects/PROJECT/instances/INSTANCE/tables/TABLE
    

    如果您希望在每次运行程序时重新创建表,您可以执行以下操作:

    if cbt ls mobile-time-series | grep -q "Family Name"; 
        then cbt deletetable mobile-time-series;
    fi
    
    cbt createtable mobile-time-series
    

    这可能并不理想,因为表删除/重新创建可能需要一些时间,因此您可能希望将时间戳附加到表名并用于此目的。如果这回答了您的问题,或者您的可重新运行脚本是否存在其他问题,请告诉我。

    【讨论】:

    • 是的,这不符合我的要求。我必须将脚本保存在 prod 环境中并在自动化作业中运行它。每次作业运行时,它都会验证表是否已创建,我们使其可重新运行,以便脚本不会失败。我们是否没有在我们使用存在或不存在子句的地方提供可重新运行的脚本
    • 你能澄清一下吗?我相信我提供的选项可以帮助您验证表是否已创建。只需ls 表,如果它返回通过grep -q 检查的列族,则它存在。
    • 是的,我有一个要求,我不能删除或删除表,但使用 shell 脚本使其 cbt 可重新运行,它将成为运行 jenkins 作业的自动化脚本的一部分。这样做的最佳方法是什么。
    • 嗨@billy jacobson,我正在根据状态码编写这个脚本。 cbt createtable abc if [[ "$?" != 0 ]];然后 cbt ls abc if [[ "$?" != 0 ]];然后 status=1 退出状态 fi fi cbt createfamily abc 配置 if [[ "$?" != 0 ]];然后 cbt ls abc| grep 配置 if [[ "$?" != 0 ]];然后 status=1 退出状态 fi fi。同样,大约有 20 张桌子。我每次都需要复制粘贴。有没有最佳方法
    • 您可以对所需的表名列表进行某种 for 循环。我对 bash 脚本不太熟悉,但您应该能够在循环中使用这些命令。
    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多