【问题标题】:How to create AWS Athena partition via AWS SDK如何通过 AWS SDK 创建 AWS Athena 分区
【发布时间】:2019-09-11 18:24:34
【问题描述】:

我尝试通过 aws sdk nodejs 添加 athena 分区。

const AWS = require('aws-sdk');
const athena = new AWS.Athena({apiVersion: '2017-05-18'});

let queryParams = {
    QueryString: `ALTER TABLE table_name ADD PARTITION (year='2018',month='10',day='10') location 's3://bucket-name/2018/10/10/'`,
    ResultConfiguration: {
        OutputLocation: 's3://bucket-name/result-logs'
    },
    QueryExecutionContext: {
        Database: 'database_name'
    }
}
athena.startQueryExecution(queryParams, (err, data) => {
    console.log('start query');
    console.log('err : ' ,  err);
    console.log('data : ' , data);
});

但是,我收到了以下错误日志。

{ InvalidRequestException: line 1:28: missing 'COLUMN' at 'PARTITION'
    at Request.extractError (/project/node_modules/aws-sdk/lib/protocol/json.js:48:27)
    at Request.callListeners (/project/node_modules/aws-sdk/lib/sequential_executor.js:109:20)
    at Request.emit (/project/node_modules/aws-sdk/lib/sequential_executor.js:81:10)
    at Request.emit (/project/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/project/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/project/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /project/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/project/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/project/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/project/node_modules/aws-sdk/lib/sequential_executor.js:119:18)
  message: 'line 1:28: missing \'COLUMN\' at \'PARTITION\'',
  code: 'InvalidRequestException',
  time: 2018-10-11T02:03:48.979Z,
  requestId: 'xxxxxxx',
  statusCode: 400,
  retryable: false,
  retryDelay: 81.3136245913281 }

我在aws docs 中找不到 COLUMN 和 PARTITION 参数

如何在 params json 中定义 COLUMN 和 PARTITION?

【问题讨论】:

  • 你能把你的表的定义发过来吗?显示创建表

标签: amazon-web-services amazon-athena


【解决方案1】:

有同样的问题,在我的情况下,我正在构建这样的查询字符串:

`ALTER TABLE table ADD IF NOT EXISTS
    PARTITION (x = ${x}, y = ${y}, dt = ${dt})`

${dt} 周围缺少'' x, y 是整数,dt 是日期字符串XXXX-XX-XX

【讨论】:

    【解决方案2】:

    S3 对象键路径应包括分区名称和值。

    例如:

    s3://bucket-name/2018/10/10/
    

    应该是

    s3://bucket-name/year=2018/month=10/day=10/
    

    【讨论】:

    • 这是不正确的。 Athena 不需要 Hive 样式的分区,分区的位置可以是任何 S3 前缀。只有 MSCK REPAIR TABLE(用于自动加载表的分区)需要 Hive 样式的分区。
    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多