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

Simple Log Service:クエリおよび分析結果のページネーション

最終更新日:Jun 03, 2026

クエリ結果が大量にある場合、ページネーションを使用して、リクエストごとに返されるログ数を制御します。検索文では offset パラメーターと line パラメーターを、分析文では LIMIT 句を使用してページネーションを行います。

ページネーションの方法

GetLogs 操作は、検索ステートメントと分析ステートメントの両方でページネーションをサポートしており、それぞれ異なる方式を使用します。 クエリを実行する前に合計ログ数を取得するには、GetHistograms を呼び出します。

  • 検索文:キーワードで生ログデータをクエリします。ページネーションを行うには、GetLogs API で offset パラメーターと line パラメーターを設定します。ログ検索の概要

  • 分析文:SQL でクエリ結果を分析します。LIMIT 句を使用してページネーションを行います。ログのクエリと分析の概要 | LIMIT 句

ページネーションの例

次の例では、クエリ結果と分析結果のページネーションを行う方法を示します。

  • クエリ結果のページネーション

    ページングクエリでは、GetLogs が 0 件の結果を返し、クエリが完了したとマークされるまで、リクエストごとにオフセットが増加します。

    • ページネーションの疑似コード

      offset = 0                           # システムがログの読み取りを開始する行。値 0 は、システムが 0 行目からログを読み取ることを示します。 
      line = 100                          # 現在の API リクエストで返される行数。最大 100 行を返すことができます。このパラメーターに 100 より大きい値を設定した場合でも、100 行しか返されません。一度に 100 行を読み取ります。 
      query = "status:200"                 # status フィールドの値が 200 であるすべてのログをクエリします。 
      while True:
           response = get_logstore_logs(query, offset, line) # 操作を呼び出してログを読み取ります。 
           process (response)                                 # カスタムロジックを呼び出して、返された結果を処理します。 
           if response.get_count() == 0 && response.is_complete()   
               # 読み取りプロセスは完了し、現在のループは終了します。
           else
              offset += 100                          # offset パラメーターの値を 100 増加させます。次の 100 行が読み取られます。

      Python コードの例

      Simple Log Service SDK for Python の概要

      # Simple Log Service のエンドポイント。 
      endpoint = '' 
      # この例では、AccessKey ID と AccessKey secret は環境変数から取得されます。 
      accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
      accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
      # プロジェクトの名前。 
      project = ''     
      # Logstore の名前。 
      logstore = ''  
      client = LogClient(endpoint, accessKeyId, accessKey)
      topic = ""
      From = int(time.time()) - 600
      To = int(time.time())
      log_line = 100
      offset = 0
      while True:
          res4 = None
          for retry_time in range(0, 3): 
              req4 = GetLogsRequest(project, logstore, From, To, topic=topic, line=log_line, offset=offset)
              res4 = client.get_logs(req4)
              if res4 is not None and res4.is_completed():
                  break
              time.sleep(1)
           offset += 100 
           if res4.is_completed() and res4.get_count() == 0:
               break;
           if res4 is not None:
               # 実行結果。 
              res4.log_print() 

      Java コードの例

      Simple Log Service SDK for Java の概要

      int log_offset = 0;
      int log_line = 100;   // 一度に読み取る行数。最大 100 行を返すことができます。100 行を超える行を読み取る場合は、offset パラメーターを使用します。offset パラメーターと line パラメーターは、キーワードを使用する検索文に対してのみ有効です。分析文を使用する場合、offset パラメーターと line パラメーターは無効です。分析文で 100 行を超える行を返す場合は、LIMIT 句を使用します。 
      while (true) {
          GetLogsResponse res4 = null;
          // オフセットごとに、一度に 100 行が読み取られます。読み取り操作が失敗した場合、最大 3 回のリトライが許可されます。 
          for (int retry_time = 0; retry_time < 3; retry_time++) {
                GetLogsRequest req4 = new GetLogsRequest(project, logstore, from, to, topic, query, log_offset,
                     log_line, false);
                res4 = client.GetLogs(req4);
                if (res4 != null && res4.IsCompleted()) {
                          break;
                      }
                      Thread.sleep(200);
                  }
                  System.out.println("Read log count:" + String.valueOf(res4.GetCount()));
                  log_offset += log_line;
                  if (res4.IsCompleted() && res4.GetCount() == 0) {
                              break;
                  }
       }                    
  • 分析結果のページネーション

    SQL の LIMIT 句を使用して、分析結果をページ分割します。 たとえば、* | select count(1) , url group by url が 1,000 エントリを返す場合、500 エントリずつ 2 つのリクエストに分割します:

    * | select count(1) , url  group by url  limit 0, 500
    * | select count(1) , url  group by url  limit 500, 500
    • ページネーションの疑似コード

      offset = 0     // システムがログの読み取りを開始する行。値 0 は、システムが 0 行目からログを読み取ることを示します。 
      line = 500    // 現在の API リクエストで返される行数。最大 1,000,000 行を返すことができます。一度に多くの行を読み取ると、ネットワーク遅延が増加し、クライアント側の処理速度が低下します。一度に 500 行を読み取ります。 
      query = "* | select count(1) , url  group by url  limit "
      while True:
      real_query = query + offset + "," +  line
      response = get_logstore_logs(real_query) // 操作を呼び出してログを読み取ります。 
      process (response)                       // カスタムロジックを呼び出して、返された結果を処理します。 
      if response.get_count() == 0   
          // 読み取りプロセスは完了し、現在のループは終了します。
      else
          offset += 500                        // offset パラメーターの値を 500 増加させます。次の 500 行が読み取られます。

      Python コードの例

      Simple Log Service SDK for Python の概要

      # Simple Log Service のエンドポイント。
      endpoint = '' 
      # この例では、AccessKey ID と AccessKey secret は環境変数から取得されます。 
      accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
      accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
      # プロジェクトの名前。 
      project = ''     
      # Logstore の名前。 
      logstore = ''  
      client = LogClient(endpoint, accessKeyId, accessKey)
      topic = ""
      origin_query = "* | select count(1) , url group by url limit "
      From = int(time.time()) - 600
      To = int(time.time())
      log_line = 500
      offset = 0
      while True:
          res4 = None
          query = origin_query + str(offset) + "," + str(log_line)
          for retry_time in range(0, 3): 
              req4 = GetLogsRequest(project, logstore, From, To, topic=topic, query=query)
              res4 = client.get_logs(req4)
              if res4 is not None and res4.is_completed():
                  break
              time.sleep(1)
          offset += log_line 
          if res4.is_completed() and res4.get_count() == 0:
              break;
          if res4 is not None:
          # 実行結果。 
              res4.log_print()   

      Java コードの例

      Simple Log Service SDK for Java の概要

      int log_offset = 0;
      int log_line = 500;
      String origin_query = "* | select count(1) , url  group by url  limit ";
      while (true) {
                  GetLogsResponse res4 = null;
                  // オフセットごとに、一度に 500 行が読み取られます。読み取り操作が失敗した場合、最大 3 回のリトライが許可されます。 
                  String query = origin_query + log_offset + "," + log_line;
                  for (int retry_time = 0; retry_time < 3; retry_time++) {
                      GetLogsRequest req4 = new GetLogsRequest(project, logstore, from, to, topic, query);
                      res4 = client.GetLogs(req4);
      
                      if (res4 != null && res4.IsCompleted()) {
                          break;
                      }
                      Thread.sleep(200);
                  }
                  System.out.println("Read log count:" + String.valueOf(res4.GetCount()));
                  log_offset += log_line;
                  if (res4.GetCount() == 0) {
                              break;
                  }
      }