检索对象内容

最近更新时间:2024-08-13 18:02:01

我的收藏

简介

本文介绍对象存储 COS 通过 iOS SDK 实现检索对象内容的示例代码和描述。

注意事项

若您要使用检索对象内容功能,需要具有目标对象的读权限:在您进行 授权策略 时,action 需要设置为cos:GetObject,更多授权请参见 支持CAM的业务接口
COS Select 支持检索以下格式的对象数据:
CSV 格式:对象以 CSV 格式存储,并以固定的分隔符划分;
JSON 格式:对象以 JSON 格式存储,可以是 JSON 文件或者 JSON 列表。
CSV、JSON 对象需要以 UTF-8 格式编码。
COS Select 支持检索 GZIP 或者 BZIP2 压缩的 CSV、JSON 对象。
COS Select 支持检索 SSE-COS 加密的 CSV、JSON 对象。

相关示例

功能名称
描述
示例代码
检索对象内容
使用结构化查询语句(Structured Query Language,SQL)从指定对象(CSV、JSON 或者 Parquet 格式)中检索内容。

使用案例

Objective-C
Swift
QCloudSelectObjectContentRequest *request = [QCloudSelectObjectContentRequest new];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
request.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "dir1/object1"
request.object = @"exampleobject";
request.selectType = @"2";
// 选择文件 配置
QCloudSelectObjectContentConfig *config= [QCloudSelectObjectContentConfig new];
/**SQL 表达式,代表您需要发起的检索操作。例如SELECT s._1 FROM COSObject s。
这个表达式可以从 CSV 格式的对象中检索第一列内容。有关 SQL 表达式的详细介绍,
请参见 (Select)[https://cloud.tencent.com/document/product/436/37636] 命令
*/
config.express = @"select * from COSObject";
/**
表达式类型,该项为扩展项,目前只支持 SQL 表达式,仅支持 SQL 参数
*/
config.expressionType = QCloudExpressionTypeSQL;
/**
描述待检索对象的格式
*/
QCloudInputSerialization *inputS = [QCloudInputSerialization new];
inputS.compressionType = QCloudCOSXMLCompressionTypeNONE;
/**
描述在JSON对象格式下所需的文件参数。
*/
QCloudSerializationJSON *inputJson = [QCloudSerializationJSON new];
/**
SON 文件的类型:
DOCUMENT 表示 JSON 文件仅包含一个独立的 JSON 对象,且该对象可以被切割成多行
LINES 表示 JSON 对象中的每一行包含了一个独立的 JSON 对象
合法值为 DOCUMENT 、LINES
*/
inputJson.type = QCloudInputJSONFileTypeDocument;
inputS.serializationJSON = inputJson;
config.inputSerialization = inputS;
/**
描述检索结果的输出格式
*/
QCloudOutputSerialization *outputS = [QCloudOutputSerialization new];

QCloudSerializationJSON *outputJson = [QCloudSerializationJSON new];
/**
将输出结果中的记录分隔为不同行的字符,默认通过\\n进行分隔。您可以指定任意8进制字符,
如逗号、分号、Tab 等。该参数最多支持2个字节,即您可以输入\\r\\n这类格式的分隔符。默认值为\\n
*/
outputJson.outputRecordDelimiter = @"\\n";
/**
描述在JSON对象格式下所需的文件参数。
*/
outputS.serializationJSON = outputJson;

config.outputSerialization = outputS;
/**
是否需要返回查询进度 QueryProgress 信息,如果选中 COS Select 将周期性返回查询进度
*/
QCloudRequestProgress *requestProgress = [QCloudRequestProgress new];
requestProgress.enabled = @"FALSE";
config.requestProgress =requestProgress;
request.selectObjectContentConfig = config;
/**
文件存储在本地的路径
*/
request.downloadingURL = [NSURL fileURLWithPath:QCloudFileInSubPath(@"test", @"2.json")];
[request setDownProcessBlock:^(int64_t bytesDownload, int64_t totalBytesDownload, int64_t totalBytesExpectedToDownload) {
NSLog(@"⏬⏬⏬⏬DOWN [Total]%lld [Downloaded]%lld [Download]%lld", totalBytesExpectedToDownload, totalBytesDownload, bytesDownload);
}];

[request setFinishBlock:^(id _Nonnull result, NSError * _Nonnull error) {
NSLog(@"result = %@",result);
}];
[[QCloudCOSXMLService defaultCOSXML] SelectObjectContent:request];
let request = QCloudSelectObjectContentRequest.init();

// 存储桶名称,格式为 BucketName-APPID
request.bucket = "examplebucket-1250000000";

// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "dir1/object1"
request.object = "exampleobject";

//代表这一接口的版本信息
request.selectType = "2";

// 选择文件 配置
let config = QCloudSelectObjectContentConfig();

/**SQL 表达式,代表您需要发起的检索操作。例如SELECT s._1 FROM COSObject s。
这个表达式可以从 CSV 格式的对象中检索第一列内容。有关 SQL 表达式的详细介绍,
请参见 (Select)[https://cloud.tencent.com/document/product/436/37636] 命令
*/
config.express = "Select * from COSObject";

/**
表达式类型,该项为扩展项,目前只支持 SQL 表达式,仅支持 SQL 参数
*/
config.expressionType = .SQL;

/**
描述待检索对象的格式
*/
let inputS = QCloudInputSerialization();

inputS.compressionType = .NONE;
/**
描述在JSON对象格式下所需的文件参数。
*/
let inputJson = QCloudSerializationJSON.init();

/**
SON 文件的类型:
DOCUMENT 表示 JSON 文件仅包含一个独立的 JSON 对象,且该对象可以被切割成多行
LINES 表示 JSON 对象中的每一行包含了一个独立的 JSON 对象
合法值为 DOCUMENT 、LINES
*/
inputJson.type = .document;

inputS.serializationJSON = inputJson;

config.inputSerialization = inputS;

/**
描述检索结果的输出格式
*/
let outputS = QCloudOutputSerialization.init();

let outputJson = QCloudSerializationJSON.init();

/**
将输出结果中的记录分隔为不同行的字符,默认通过\\n进行分隔。您可以指定任意8进制字符,
如逗号、分号、Tab 等。该参数最多支持2个字节,即您可以输入\\r\\n这类格式的分隔符。默认值为\\n
*/
outputJson.outputRecordDelimiter = "\\n";

outputS.serializationJSON = outputJson;

config.outputSerialization = outputS;

/**
是否需要返回查询进度 QueryProgress 信息,如果选中 COS Select 将周期性返回查询进度
*/
let requestProgress = QCloudRequestProgress.init();
requestProgress.enabled = "FALSE";

config.requestProgress = "requestProgress";
request.selectObjectContentConfig = config;
//文件在本地的存储路径
request.downloadingURL = NSURL.fileURL(withPath: QCloudFileInSubPath("test", "2.json"));
request.finishBlock = {(result,error) in
if error != nil{
print(error!)
}else{
print(result!);
}
}
QCloudCOSXMLService.defaultCOSXML().selectObjectContent(request);

SDK API 参考

SDK 所有接口的具体参数与方法说明,请参考 SDK API

API 操作

关于检索对象内容涉及的 API 接口说明,请参见 SELECT Object Content 文档。