通过命令行工具使用宽表模型

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

表格存储提供了管理控制台、命令行工具(Tablestore CLI)和Tablestore SDK三种访问方式。通过Tablestore CLI使用表格存储宽表模型(WideColumn)时,您需要根据所用平台下载相应命令行工具,然后使用命令行工具进行开通表格存储服务、创建实例、配置接入实例信息、创建数据表、读写表中数据以及使用SQL查询数据的操作。

前提条件

已获取用于操作表格存储的阿里云账号或者RAM用户的登录信息。

如果未注册阿里云账号,您需要在阿里云官网注册阿里云账号

如果要使用RAM用户体验表格存储功能,您需要使用阿里云账号创建RAM用户并授予RAM用户访问表格存储的权限。具体操作,请参见通过RAM PolicyRAM用户授权

警告

阿里云账号AccessKey泄露会威胁您所有资源的安全。建议您使用RAM用户AccessKey进行操作,可以有效降低AccessKey泄露的风险。

如果要使用命令行工具访问表格存储,您还需要为阿里云账号或者RAM用户创建AccessKey。具体操作,请参见获取AccessKey

注意事项

通过命令行工具只能创建按量模式下的高性能实例。如果要创建按量模式下的容量型实例或者预留模式下的实例,请通过控制台创建实例。具体操作,请参见创建实例

步骤一:下载并启动命令行工具

  1. 根据所用平台下载命令行工具。

    平台

    下载地址

    Windows

    Windows10及之后版本

    Linux

    macOS

  2. 解压缩下载的工具包,进入命令行工具根目录后,根据所用平台选择相应方式启动命令行工具。

    • 对于Windows平台,双击ts.exe文件。

    • 对于LinuxMac平台,执行./ts命令。

      说明

      如果在Linux系统或者Mac系统下无可执行权限,请执行chmod 755 ts命令赋权后再启动命令行工具。

    启动界面如下所示。

    # Welcome to use Command Line Tool for Aliyun Tablestore. Current Version is '2021-11-11'.
    #    _______      _      _              _
    #   |__   __|    | |    | |            | |
    #      | |  __ _ | |__  | |  ___   ___ | |_   ___  _ __    ___
    #      | | / _' || '_ \ | | / _ \ / __|| __| / _ \ | '__| / _ \
    #      | || (_| || |_) || ||  __/ \__ \| |_ | (_) || |   |  __/
    #      |_| \__,_||_.__/ |_| \___| |___/ \__| \___/ |_|    \___|
    #
    # Please visit our product website: https://www.aliyun.com/product/ots
    # You can also join our DingTalk Chat Group (ID: 11789671 or 23307953) to discuss and ask Tablestore related questions.
    #
    tablestore>

步骤二:开通表格存储服务

如果已经开通表格存储服务,请跳过此操作。服务仅需开通一次,开通过程免费。

  1. 通过config命令配置AccessKey信息。更多信息,请参见启动并配置接入信息

    重要

    此处必须使用阿里云账号的AccessKey(包括AccessKey IDAccessKey Secret)。关于获取AccessKey的具体操作,请参见获取AccessKey

    config --id NTS********************** --key 7NR2****************************************
  2. 执行enable_service命令,开通表格存储服务。

步骤三:创建实例

通过create_instance命令创建一个高性能实例。更多信息,请参见实例操作

执行以下命令,在华东1(杭州)地域创建myinstance实例,实例类型为高性能实例。

create_instance -d "First instance created by CLI." -n myinstance -r cn-hangzhou

步骤四:配置接入实例信息

通过config命令配置接入信息。更多信息,请参见启动并配置接入信息

执行以下命令,使用已创建的myinstance实例配置接入信息。

config --endpoint https://myinstance.cn-hangzhou.ots.aliyuncs.com --instance myinstance --id NTSVLeBHzgX2iZfcaXXPJ**** --key 7NR2DiotscDbauohSq9kSHX8BDp99bjs7eNpCR7o****

步骤五:创建并使用数据表

创建数据表后,选择要进行操作的数据表,用于后续表操作或者数据操作。更多信息,请参见数据表操作

  1. 执行如下命令,创建order数据表。

    create -t order --pk '[{"c":"id","t":"string"}]'
  2. 执行如下命令,使用order数据表。

    use --wc -t order

步骤六:数据操作

根据需要进行数据操作,您可以插入一行数据、更新一行数据、读取一行数据、删除一行数据、导入数据或者导出数据。更多信息,请参见数据操作

  • 插入一行数据

    以下示例用于在数据表中插入一行数据。

    put --pk '["000000114d884ca1dbd6b9a58e8d0d94"]' --attr '[{"c":"pBrand","v":"brand1"},{"c":"pPrice","v":1599.0},{"c":"payTime","v":1509615334404,"isint":true},{"c":"totalPrice","v":2498.99},{"c":"sName","v":"售周五"},{"c":"pId","v":"p0003004"},{"c":"oId","v":"o0039248410"},{"c":"hasPaid","v":true},{"c":"sId","v":"s0015"},{"c":"orderTime","v":1509614885965,"isint":true},{"c":"pName","v":"brand1 type"},{"c":"cName","v":"消冯八"},{"c":"pType","v":"手机"},{"c":"pCount","v":1,"isint":true},{"c":"cId","v":"c0018"}]'
  • 读取一行数据

    以下示例用于读取主键列值为“000000114d884ca1dbd6b9a58e8d0d94”的行数据。

    get --pk '["000000114d884ca1dbd6b9a58e8d0d94"]'

    输出结果如下所示。

    +----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+-------------+--------+-------+---------------+-------+--------+------------+
    | id                               | cId   | cName  | hasPaid | oId         | orderTime     | pBrand | pCount | pId      | pName       | pPrice | pType | payTime       | sId   | sName  | totalPrice |
    +----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+-------------+--------+-------+---------------+-------+--------+------------+
    | 000000114d884ca1dbd6b9a58e8d0d94 | c0018 | 消冯八 | true    | o0039248410 | 1509614885965 | brand1 | 1      | p0003004 | brand1 type | 1599   | 手机  | 1509615334404 | s0015 | 售周五 | 2498.99    |
    +----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+-------------+--------+-------+---------------+-------+--------+------------+
  • 更新一行数据

    以下示例用于更新主键列为“000000114d884ca1dbd6b9a58e8d0d94”的行数据。无论此行是否存在均会插入新数据,如果之前行已存在,则写入数据时会覆盖原有数据。

    update --pk '["000000114d884ca1dbd6b9a58e8d0d94"]' --attr '[{"c":"pBrand","v":"brand2"},{"c":"pPrice","v":1599.0},{"c":"payTime","v":1509615334404,"isint":true},{"c":"totalPrice","v":2498.99},{"c":"sName","v":"售周五"},{"c":"pId","v":"p0003004"},{"c":"oId","v":"o0039248410"},{"c":"hasPaid","v":true},{"c":"sId","v":"s0015"},{"c":"orderTime","v":1509614885965,"isint":true},{"c":"pName","v":"brand2 type"},{"c":"cName","v":"消冯八"},{"c":"pType","v":"手机"},{"c":"pCount","v":1,"isint":true},{"c":"cId","v":"c0018"}]'  --condition ignore
  • 导入数据

    下载样例数据压缩包到本地并解压,然后执行import命令批量导入数据。

    说明

    样例数据中总共包含100万条订单数据,可通过import -l参数自定义导入行数。

    以下示例用于导入样例数据文件中的5万条订单数据到当前表,且使用当前时间作为时间戳。其中yourFilePath表示样例数据压缩包解压后的路径,例如D:\\order_demo_data_1000000\\order_demo_data_1000000

    import -i yourFilePath --ignore_version -l 50000

    输出结果如下所示。

    Current speed is: 15800 rows/s. Total succeed count 15800, failed count 0.
    Current speed is: 27400 rows/s. Total succeed count 43200, failed count 0.
    Import finished, total count is 50000, failed 0 rows.
  • 扫描数据

    以下示例用于扫描获取数据表中的最多10行数据。

    scan --limit 10
  • 删除一行数据

    以下示例用于删除主键列值为“000000114d884ca1dbd6b9a58e8d0d94”的行数据。

    delete --pk '["000000114d884ca1dbd6b9a58e8d0d94"]'
  • 导出数据

    导出表中数据到本地JSON文件中。

    以下示例用于导出当前表中pId、oIdcName列的数据到本地文件mydata.json。

    scan -o /tmp/mydata.json -c pId,oId,cName

步骤七:使用SQL查询数据

SQL查询兼容MySQL的查询语法,同时提供基础的SQL DDL建表能力。对于已有数据表,通过执行CREATE TABLE一键自动建立映射关系后,您可以使用SQL方式访问表中数据。更多信息,请参见SQL查询

如果要使用SQL语句快速查询表中数据,请执行以下步骤:

  1. 执行sql命令,进入SQL模式。

  2. 执行以下命令,为order数据表绑定映射关系。

    说明

    数据表与映射表的字段类型对应关系请参见SQL数据类型映射

    CREATE TABLE `order` (
        `id` VARCHAR(1024),
        `cId` MEDIUMTEXT,
        `cName` MEDIUMTEXT,
        `hasPaid` BOOL,
        `oId` MEDIUMTEXT,
        `orderTime` BIGINT(20),
        `pBrand` MEDIUMTEXT,
        `pCount` BIGINT(20),
        `pId` MEDIUMTEXT,
        `pName` MEDIUMTEXT,
        `pPrice` DOUBLE,
        `pType` MEDIUMTEXT,
        `payTime` BIGINT(20),
        `sId` MEDIUMTEXT,
        `sName` MEDIUMTEXT,
        `totalPrice` DOUBLE,
        PRIMARY KEY(`id`)
    );
  3. 根据需要查询order表中的数据。

    • 示例一:查询10条售货员姓名为“售周五”的订单,按照订单总金额升序排列。

      SELECT * FROM `order` WHERE sName = "售周五" ORDER BY totalPrice ASC LIMIT 10;
    • 示例二:统计产品类型为“手机”的订单条数。

      SELECT count(*) FROM `order` WHERE pType = "手机";
    • 示例三:统计产品个数大于1的订单条数。

      SELECT count(*) FROM `order` WHERE pCount > 1;

如果要退出SQL模式,请执行exit;命令。

常见问题

相关文档