すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトの照会

最終更新日:Dec 15, 2023

このトピックでは、Object Storage Service (OSS) SDK for Javaを使用して、SelectObjectを呼び出してバケット内のCSVおよびJSONオブジェクトをクエリする方法について説明します。

説明

SelectObject操作の詳細については、「オブジェクトの照会」および「SelectObject」をご参照ください。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。

  • オブジェクトをクエリするには、oss:GetObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

  • SelectObjectを使用して照会できるのは、CSV形式とJSON形式のオブジェクトのみです。

次のサンプルコードは、CSVおよびJSONオブジェクトのクエリ方法の例を示しています。

com.aliyun.oss.mo delをインポートします。*;
com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。java.io.BufferedReaderをインポートします。java.io.ByteArrayInputStreamをインポートします。java.io.InputStreamReaderをインポートします。/**
 * 選択オブジェクトメタデータと選択オブジェクトの作成例。
 *
 * /
public class SelectObjectSample {
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
    プライベート静的文字列エンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
    // バケットの名前を指定します。 例: examplebucket. 
    プライベート静的文字列bucketName = "examplebucket";

    public static void main(String[] args) throws Exception {
      
      	// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Create an OSSClient instance. 
      	OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        // クエリするオブジェクトの完全パスを指定し、SELECTステートメントを使用してオブジェクトのデータをクエリします。 バケット名をフルパスに含めないでください。 
        // CSVオブジェクトのフルパスを指定します。 
        selectCsvSample("test.csv" 、ossClient);
        // JSONオブジェクトのフルパスを指定します。 
        selectJsonSample("test.json" 、ossClient);
        ossClient.shutdown();
    }

    private static void selectCsvSample (文字列キー、OSS ossClient) が例外をスロー {
        // アップロードするオブジェクトのコンテンツを指定します。 
        String content = "name,school,company,age\r\n" +
                "Lora Francis,School A,Staples Inc,27\r\n" +
                "エレノア・リトル、スクールB、\" Conectiv、Inc\"、43\r\n" +
                「ロージー・ヒューズ、スクールC、Western Gas Resources Inc、44\r\n」 +
                「ローレンス・ロス、スクールD、メットライフ社、24」;

        ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));

        SelectObjectMetadata selectObjectMetadata = ossClient.createSelectObjectMetadata ()
                new CreateSelectObjectMetadataRequest(bucketName, key)
                        .withInputSerialization(
                                new InputSerialization().withCsvInputFormat(
                                        // コンテンツ内のさまざまなレコードを区切るために使用される区切り文字を指定します。 例: \r\n。 
                                        新しいCSVFormat().withHeaderInfo(CSVFormat.Header.Use).withRecordDelimiter("\r\n")));
        System.out.println(selectObjectMetadata.getCsvObjectMetadata().getTotalLines());
        System.out.println(selectObjectMetadata.getCsvObjectMetadata().getSplits());

        SelectObjectRequest selectObjectRequest =
                新しいSelectObjectRequest(bucketName, key)
                        .withInputSerialization(
                                new InputSerialization().withCsvInputFormat(
                                        新しいCSVFormat().withHeaderInfo(CSVFormat.Header.Use).withRecordDelimiter("\r\n")))
                        . withOutputSerialization(new OutputSerialization().withCsvOutputFormat(new CSVFormat()));
        // SELECTステートメントを使用して、4番目の列の値が40より大きいすべてのレコードを照会します。 
        selectObjectRequest.setExpression("select * from ossobject where _4 > 40");
        OSSObject ossObject = ossClient.selectObject(selectObjectRequest);

        // オブジェクトの内容を読み取ります。 
        BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
        一方、(TRUE){
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            System.out.println (ライン);
        }
        reader.close();

        ossClient.de leteObject(bucketName、key);
    }

    private static void selectJsonSample (文字列キー、OSS ossClient) が例外をスロー {
        // アップロードするオブジェクトのコンテンツを指定します。 
        final String content = "{\n" +
                "\t\" name\": \" Lora Francis\",\n" +
                "\t\" age\": 27,\n" +
                "\t\" company\": \" ステープルズ株式会社 \"\n" +
                "}\n" +
                "{\n" +
                "\t\" name\": \" Eleanor Little\",\n" +
                "\t\" age\": 43,\n" +
                "\t\" company\": \" Conectiv、Inc\"\n" +
                "}\n" +
                "{\n" +
                "\t\" name\": \" Rosie Hughes\",\n" +
                "\t\" age\": 44,\n" +
                "\t\" company\": \" Western Gas Resources Inc\"\n" +
                "}\n" +
                "{\n" +
                "\t\" name\": \" ローレンス・ロス \",\n" +
                "\t\" age\": 24,\n" +
                "\t\" 会社 \": \" メットライフ株式会社 \"\n" +
                "}";

        ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));

        SelectObjectRequest selectObjectRequest =
                新しいSelectObjectRequest(bucketName, key)
                        . withInputSerialization(new InputSerialization())
                                . withCompressionType(CompressionType.NONE)
                                . withJsonInputFormat(new JsonFormat().withJsonType(JsonType.LINES)))
                        . withOutputSerialization(new OutputSerialization())
                                . withCrcEnabled(true)
                                . withJsonOutputFormat (新しいJsonFormat())
                        . withExpression("select * from ossobject as s where s.age > 40"); // SELECTステートメントを使用して、オブジェクト内のデータを照会します。 

        OSSObject ossObject = ossClient.selectObject(selectObjectRequest);

        // オブジェクトの内容を読み取ります。 
        BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
        一方、(TRUE){
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            System.out.println (ライン);
        }
        reader.close();

        ossClient.de leteObject(bucketName、key);
    }
}

参考資料

  • オブジェクトのクエリに使用する完全なサンプルコードについては、『GitHub』をご参照ください。

  • オブジェクトをクエリするために呼び出すAPI操作の詳細については、「SelectObject」をご参照ください。