애플리케이션과 QueryData 통합

이 튜토리얼에서는 Google Cloud 콘솔을 사용하여 Bigtable에서 QueryData를 설정하고 사용하며 애플리케이션과 통합하는 방법을 설명합니다. 컨텍스트 세트 파일을 빌드하고, 컨텍스트 세트 파일을 사용하는 컨텍스트 세트를 만들고, MCP 도구 상자를 사용하여 Conversational Analytics API의 QueryData 메서드를 호출하여 자연어 질문에 대한 SQL 쿼리를 생성하고, 이를 애플리케이션과 통합하는 방법을 알아봅니다.

자세한 내용은 QueryData 개요를 참조하세요.

목표

이 튜토리얼에서는 다음 목표를 다룹니다.

  • 데이터베이스 테이블을 만들고 데이터를 채웁니다
  • 컨텍스트 엔지니어링 에이전트를 사용하여 컨텍스트 세트 파일을 빌드합니다.
  • 컨텍스트 세트를 만들고 컨텍스트 세트 파일을 업로드합니다.
  • Bigtable Studio에서 QueryData를 테스트하고 SQL 쿼리를 생성합니다.
  • MCP 도구 상자의 Gemini 데이터 분석 QueryData 도구를 사용하여 QueryData를 애플리케이션과 통합합니다.
  • 값 검색어를 사용하여 LLM 응답에 그라운딩을 추가합니다.

비용

이 문서에서는 비용이 청구될 수 있는 Google Cloud구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용합니다.

신규 Google Cloud 사용자는 무료 체험판을 이용할 수 있습니다.

요금이 계속 청구되지 않도록 하려면 이 문서의 작업을 완료한 후 만든 리소스를 삭제하세요. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

컨텍스트 세트를 만들기 전에 다음 기본 요건을 완료하세요.

필수 서비스 사용 설정

프로젝트에 다음 서비스를 사용 설정합니다.

Bigtable 인스턴스 준비

Bigtable 인스턴스를 사용할 수 있는지 확인합니다. 자세한 내용은 인스턴스 만들기를 참조하세요.

cbt CLI를 설치

cbt CLI를 설치하고 구성하여 테이블을 만들고 데이터를 채웁니다. 자세한 내용은 cbt CLI 개요를 참조하세요.

필수 역할 및 권한

  • 인스턴스 또는 프로젝트 수준에서 IAM 사용자에게 bigtable.admin 역할을 부여합니다. 자세한 내용은 IAM으로 Bigtable 액세스 제어를 참조하세요.
  • 프로젝트 수준에서 IAM 사용자에게 geminidataanalytics.queryDataUser 역할을 부여합니다. 자세한 내용은 프로젝트에 IAM 정책 바인딩 추가를 참조하세요.
  • 컨텍스트 세트를 만들고, 업로드하고, 관리하려면 프로젝트 수준에서 IAM 사용자에게 Dataplex 카탈로그 편집자(roles/dataplex.catalogEditor) 또는 Dataplex 카탈로그 관리자(roles/dataplex.catalogAdmin) 역할을 부여합니다. 자세한 내용은 컨텍스트 세트 권한을 참고하세요.

flights 및 airports 스키마 및 테이블 만들기

이 섹션에서는 이 튜토리얼의 flights 및 airports 데이터베이스 테이블을 만듭니다.

  1. ~/.cbtrc에서 기본 프로젝트 및 인스턴스를 구성합니다.
    echo project = PROJECT_ID >> ~/.cbtrc
    echo instance = INSTANCE_ID >> ~/.cbtrc
    각 항목의 의미는 다음과 같습니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • INSTANCE_ID: Bigtable 인스턴스 ID입니다.
  2. 다음 명령어를 실행하여 airports 테이블과 info column family를 만듭니다.

    cbt createtable airports "families=info"
  3. 다음 명령어를 실행하여 flights 테이블과 info column family를 만듭니다.

    cbt createtable flights "families=info"

flights 및 airports 테이블 채우기

이 섹션에서는 cbt import 명령어를 사용하여 flights 및 airports 테이블을 채웁니다.

  1. 다음 콘텐츠로 airports.csv라는 파일을 만듭니다.

    ,info,info,info,info
    ,iata,name,city,country
    AIRPORT#3249,BOS,General Edward Lawrence Logan International Airport,Boston,United States
    AIRPORT#3257,OGG,Kahului Airport,Kahului,United States
    AIRPORT#3259,MCI,Kansas City International Airport,Kansas City,United States
    AIRPORT#3263,PHX,Phoenix Sky Harbor International Airport,Phoenix,United States
    AIRPORT#3270,SFO,San Francisco International Airport,San Francisco,United States
    AIRPORT#3285,LAX,Los Angeles International Airport,Los Angeles,United States
    AIRPORT#3287,CLE,Cleveland Hopkins International Airport,Cleveland,United States
    AIRPORT#3295,EWR,Newark Liberty International Airport,Newark,United States
    AIRPORT#3296,BOI,Boise Air Terminal/Gowen Field,Boise,United States
    AIRPORT#3303,DAL,Dallas Love Field,Dallas,United States
    AIRPORT#3315,KOA,Ellison Onizuka Kona International At Keahole Airport,Kona,United States
    AIRPORT#3321,DCA,Ronald Reagan Washington National Airport,Washington,United States
    AIRPORT#3336,SLC,Salt Lake City International Airport,Salt Lake City,United States
    AIRPORT#3350,IAH,George Bush Intercontinental Houston Airport,Houston,United States
    AIRPORT#3370,PIT,Pittsburgh International Airport,Pittsburgh,United States
    AIRPORT#3376,MIA,Miami International Airport,Miami,United States
    AIRPORT#3377,SEA,Seattle Tacoma International Airport,Seattle,United States
    AIRPORT#3382,LGB,Long Beach /Daugherty Field/ Airport,Long Beach,United States
    AIRPORT#3385,IND,Indianapolis International Airport,Indianapolis,United States
    AIRPORT#3402,LIH,Lihue Airport,Lihue,United States
    AIRPORT#3421,SAT,San Antonio International Airport,San Antonio,United States
    AIRPORT#3426,RDU,Raleigh Durham International Airport,Raleigh-durham,United States
    AIRPORT#3436,TUS,Tucson International Airport,Tucson,United States
    AIRPORT#3444,BUR,Bob Hope Airport,Burbank,United States
    AIRPORT#3445,DTW,Detroit Metropolitan Wayne County Airport,Detroit,United States
    AIRPORT#3470,DFW,Dallas Fort Worth International Airport,Dallas-Fort Worth,United States
    AIRPORT#3473,AUS,Austin Bergstrom International Airport,Austin,United States
    AIRPORT#3478,STL,St Louis Lambert International Airport,St. Louis,United States
    AIRPORT#3482,ATL,Hartsfield Jackson Atlanta International Airport,Atlanta,United States
    AIRPORT#3487,FAT,Fresno Yosemite International Airport,Fresno,United States
    AIRPORT#3514,IAD,Washington Dulles International Airport,Washington,United States
    AIRPORT#3517,MKE,General Mitchell International Airport,Milwaukee,United States
    AIRPORT#3520,PDX,Portland International Airport,Portland,United States
    AIRPORT#3528,HNL,Daniel K Inouye International Airport,Honolulu,United States
    AIRPORT#3531,SAN,San Diego International Airport,San Diego,United States
    AIRPORT#3534,ONT,Ontario International Airport,Ontario,United States
    AIRPORT#3547,MDW,Chicago Midway International Airport,Chicago,United States
    AIRPORT#3551,DEN,Denver International Airport,Denver,United States
    AIRPORT#3552,PHL,Philadelphia International Airport,Philadelphia,United States
    AIRPORT#3597,JFK,John F Kennedy International Airport,New York,United States
    AIRPORT#3607,RNO,Reno Tahoe International Airport,Reno,United States
    AIRPORT#3617,SMF,Sacramento International Airport,Sacramento,United States
    AIRPORT#3619,COS,City of Colorado Springs Municipal Airport,Colorado Springs,United States
    AIRPORT#3639,PSP,Palm Springs International Airport,Palm Springs,United States
    AIRPORT#3649,BWI,Baltimore/Washington International Thurgood Marshall Airport,Baltimore,United States
    AIRPORT#3658,MSP,Minneapolis-St Paul International/Wold-Chamberlain Airport,Minneapolis,United States
    AIRPORT#3661,MSY,Louis Armstrong New Orleans International Airport,New Orleans,United States
    AIRPORT#3667,SNA,John Wayne Airport-Orange County Airport,Santa Ana,United States
    AIRPORT#3676,CLT,Charlotte Douglas International Airport,Charlotte,United States
    AIRPORT#3677,LAS,McCarran International Airport,Las Vegas,United States
    AIRPORT#3678,MCO,Orlando International Airport,Orlando,United States
    AIRPORT#3742,MRY,Monterey Peninsula Airport,Monterey,United States
    AIRPORT#3743,SBA,Santa Barbara Municipal Airport,Santa Barbara,United States
    AIRPORT#3875,RDD,Redding Municipal Airport,Redding,United States
    AIRPORT#3876,EUG,Mahlon Sweet Field,Eugene,United States
    AIRPORT#3878,MFR,Rogue Valley International Medford Airport,Medford,United States
    AIRPORT#3880,RDM,Roberts Field,Redmond-Bend,United States
    AIRPORT#4111,ACV,California Redwood Coast-Humboldt County Airport,Arcata CA,United States
    AIRPORT#4419,CEC,Jack Mc Namara Field Airport,Crescent City,United States
    AIRPORT#4460,SBP,San Luis County Regional Airport,San Luis Obispo,United States
    AIRPORT#4768,PSC,Tri Cities Airport,Pasco,United States
    AIRPORT#5088,SUN,Friedman Memorial Airport,Hailey,United States
    AIRPORT#5305,ASE,Aspen-Pitkin Co/Sardy Field,Aspen,United States
    AIRPORT#5362,MMH,Mammoth Yosemite Airport,Mammoth Lakes,United States
  2. airports.csv 파일의 데이터를 airports 테이블로 가져옵니다.

    cbt import airports airports.csv
  3. 다음 콘텐츠로 flights.csv라는 파일을 만듭니다.

    ,info,info,info,info,info,info,info,info,info,info
    ,airline,flight_number,departure_airport,arrival_airport,departure_time,arrival_time,departure_gate,arrival_gate,departure_city,arrival_city
    FLIGHT#0000,UA,1532,SFO,DEN,2025-01-01 05:50:00,2025-01-01 09:23:00,E49,D6,San Francisco,Denver
    FLIGHT#0001,UA,1158,SFO,ORD,2025-01-01 05:57:00,2025-01-01 12:13:00,C38,D30,San Francisco,Chicago
    FLIGHT#0002,F9,1057,IAH,SFO,2025-01-01 05:52:00,2025-01-01 08:14:00,E33,E43,Houston,San Francisco
    FLIGHT#0003,OO,6403,MFR,SFO,2025-01-01 05:57:00,2025-01-01 07:23:00,A6,E50,Medford,San Francisco
    FLIGHT#0004,OO,5628,RNO,SFO,2025-01-01 06:19:00,2025-01-01 07:37:00,A37,B29,Reno,San Francisco
    FLIGHT#0005,CY,922,SFO,LAX,2025-01-01 06:38:00,2025-01-01 07:49:00,D20,E45,San Francisco,Los Angeles
    FLIGHT#0006,AA,338,LAX,SFO,2025-01-01 06:44:00,2025-01-01 08:03:00,E20,A45,Los Angeles,San Francisco
    FLIGHT#0007,UA,1195,MCO,SFO,2025-01-01 12:28:00,2025-01-01 15:06:00,D22,B36,Orlando,San Francisco
    FLIGHT#0008,OO,5632,SBA,SFO,2025-01-01 06:56:00,2025-01-01 08:39:00,E19,A49,Santa Barbara,San Francisco
    FLIGHT#0009,UA,300,CLE,SFO,2025-01-01 07:15:00,2025-01-01 09:22:00,E8,C28,Cleveland,San Francisco
    FLIGHT#0010,UA,706,SEA,SFO,2025-01-01 07:14:00,2025-01-01 09:07:00,A32,B26,Seattle,San Francisco
    FLIGHT#0011,AA,167,MIA,SFO,2025-01-01 07:47:00,2025-01-01 10:51:00,A23,E4,Miami,San Francisco
    FLIGHT#0012,OO,5441,SFO,SBP,2025-01-01 07:08:00,2025-01-01 08:12:00,E21,D24,San Francisco,San Luis Obispo
    FLIGHT#0013,UA,616,SFO,ORD,2025-01-01 07:14:00,2025-01-01 13:24:00,A11,D8,San Francisco,Chicago
    FLIGHT#0014,AA,24,SFO,JFK,2025-01-01 07:14:00,2025-01-01 15:46:00,D4,C15,San Francisco,New York
    FLIGHT#0015,UA,72,HNL,SFO,2025-01-01 07:28:00,2025-01-01 14:22:00,B33,D49,Honolulu,San Francisco
    FLIGHT#0016,AS,244,PDX,SFO,2025-01-01 07:24:00,2025-01-01 09:04:00,E46,B8,Portland,San Francisco
    FLIGHT#0017,OO,6307,MSP,SFO,2025-01-01 07:29:00,2025-01-01 09:32:00,C49,C36,Minneapolis,San Francisco
    FLIGHT#0018,OO,4975,STL,SFO,2025-01-01 07:31:00,2025-01-01 09:58:00,C43,E16,St. Louis,San Francisco
    FLIGHT#0019,AA,23,DFW,SFO,2025-01-01 08:41:00,2025-01-01 10:34:00,E13,E19,Dallas-Fort Worth,San Francisco
    FLIGHT#0020,B6,434,SFO,BOS,2025-01-01 08:00:00,2025-01-01 16:23:00,D16,E46,San Francisco,Boston
    FLIGHT#0021,F9,657,DEN,SFO,2025-01-01 07:58:00,2025-01-01 09:13:00,E41,E28,Denver,San Francisco
    FLIGHT#0022,OO,6464,COS,SFO,2025-01-01 07:56:00,2025-01-01 09:45:00,D49,E17,Colorado Springs,San Francisco
    FLIGHT#0023,UA,1235,IAD,SFO,2025-01-01 08:28:00,2025-01-01 11:15:00,A22,D19,Washington,San Francisco
    FLIGHT#0024,OO,6527,EUG,SFO,2025-01-01 07:54:00,2025-01-01 09:36:00,D9,B26,Eugene,San Francisco
    FLIGHT#0025,AA,242,SFO,ORD,2025-01-01 08:18:00,2025-01-01 14:26:00,E30,C1,San Francisco,Chicago
    FLIGHT#0026,UA,1739,SFO,EWR,2025-01-01 08:22:00,2025-01-01 16:42:00,C13,D45,San Francisco,Newark
    FLIGHT#0027,B6,133,BOS,SFO,2025-01-01 08:34:00,2025-01-01 12:30:00,D49,C16,Boston,San Francisco
    FLIGHT#0028,OO,6336,SFO,RNO,2025-01-01 08:32:00,2025-01-01 09:29:00,B45,A2,San Francisco,Reno
    FLIGHT#0029,UA,567,IAD,SFO,2025-01-01 10:47:00,2025-01-01 13:39:00,C27,B24,Washington,San Francisco
    FLIGHT#0030,OO,5223,SLC,SFO,2025-01-01 08:50:00,2025-01-01 09:55:00,C38,C11,Salt Lake City,San Francisco
    FLIGHT#0031,US,1784,SFO,CLT,2025-01-01 08:47:00,2025-01-01 16:32:00,C42,C31,San Francisco,Charlotte
    FLIGHT#0032,WN,1579,ATL,SFO,2025-01-01 08:48:00,2025-01-01 10:55:00,C47,B5,Atlanta,San Francisco
    FLIGHT#0033,OO,6396,BOI,SFO,2025-01-01 08:56:00,2025-01-01 09:43:00,E20,A6,Boise,San Francisco
    FLIGHT#0034,AA,2293,DFW,SFO,2025-01-01 08:57:00,2025-01-01 11:08:00,D41,C37,Dallas-Fort Worth,San Francisco
    FLIGHT#0035,DL,1106,SFO,MSP,2025-01-01 09:06:00,2025-01-01 14:56:00,E38,B30,San Francisco,Minneapolis
    FLIGHT#0036,DL,1631,SFO,ATL,2025-01-01 09:00:00,2025-01-01 16:26:00,B13,B45,San Francisco,Atlanta
    FLIGHT#0037,OO,5427,SFO,SMF,2025-01-01 09:06:00,2025-01-01 10:00:00,C34,C25,San Francisco,Sacramento
    FLIGHT#0038,CY,352,SFO,BOS,2025-01-01 09:25:00,2025-01-01 17:51:00,A46,E42,San Francisco,Boston
    FLIGHT#0039,UA,1239,LAX,SFO,2025-01-01 09:59:00,2025-01-01 11:19:00,A35,C2,Los Angeles,San Francisco
    FLIGHT#0040,UA,1285,SFO,IAH,2025-01-01 09:41:00,2025-01-01 15:20:00,A39,E10,San Francisco,Houston
    FLIGHT#0041,CY,753,SEA,SFO,2025-01-01 09:58:00,2025-01-01 11:53:00,C40,E35,Seattle,San Francisco
    FLIGHT#0042,CY,956,SFO,SAN,2025-01-01 09:57:00,2025-01-01 11:30:00,B10,E44,San Francisco,San Diego
    FLIGHT#0043,OO,5196,PDX,SFO,2025-01-01 09:53:00,2025-01-01 11:39:00,D13,C34,Portland,San Francisco
    FLIGHT#0044,WN,2346,SFO,LAX,2025-01-01 09:59:00,2025-01-01 11:17:00,C24,E45,San Francisco,Los Angeles
    FLIGHT#0045,OO,6400,EUG,SFO,2025-01-01 10:06:00,2025-01-01 11:27:00,E46,D20,Eugene,San Francisco
    FLIGHT#0046,CY,23,JFK,SFO,2025-01-01 10:21:00,2025-01-01 14:09:00,D2,B21,New York,San Francisco
    FLIGHT#0047,B6,534,SFO,BOS,2025-01-01 10:33:00,2025-01-01 18:55:00,A49,A5,San Francisco,Boston
    FLIGHT#0048,UA,1727,BOS,SFO,2025-01-01 10:34:00,2025-01-01 13:57:00,D43,A31,Boston,San Francisco
    FLIGHT#0049,WN,4391,LAS,SFO,2025-01-01 10:49:00,2025-01-01 12:17:00,A40,C49,Las Vegas,San Francisco
    FLIGHT#0050,OO,5335,CEC,SFO,2025-01-01 10:25:00,2025-01-01 12:04:00,C8,C6,Crescent City,San Francisco
    FLIGHT#0051,DL,1680,ATL,SFO,2025-01-01 10:43:00,2025-01-01 12:45:00,E49,E24,Atlanta,San Francisco
    FLIGHT#0052,OO,6283,SFO,MCI,2025-01-01 10:38:00,2025-01-01 17:01:00,C32,B12,San Francisco,Kansas City
    FLIGHT#0053,OO,5260,SFO,FAT,2025-01-01 10:37:00,2025-01-01 11:39:00,B46,B43,San Francisco,Fresno
    FLIGHT#0054,OO,6249,LAS,SFO,2025-01-01 10:48:00,2025-01-01 12:19:00,D11,A49,Las Vegas,San Francisco
    FLIGHT#0055,AA,23,SFO,DFW,2025-01-01 11:23:00,2025-01-01 17:00:00,B31,A11,San Francisco,Dallas-Fort Worth
    FLIGHT#0056,UA,753,SFO,AUS,2025-01-01 10:59:00,2025-01-01 16:44:00,B18,D6,San Francisco,Austin
    FLIGHT#0057,WN,4855,SFO,MKE,2025-01-01 11:08:00,2025-01-01 17:33:00,D3,D40,San Francisco,Milwaukee
    FLIGHT#0058,DL,1845,SLC,SFO,2025-01-01 11:29:00,2025-01-01 12:06:00,A22,D2,Salt Lake City,San Francisco
    FLIGHT#0059,UA,720,SFO,DEN,2025-01-01 12:46:00,2025-01-01 16:19:00,C41,E39,San Francisco,Denver
    FLIGHT#0060,UA,1257,IAH,SFO,2025-01-01 11:30:00,2025-01-01 13:19:00,A26,D2,Houston,San Francisco
    FLIGHT#0061,WN,2509,SFO,LAX,2025-01-01 11:34:00,2025-01-01 13:03:00,C42,D35,San Francisco,Los Angeles
    FLIGHT#0062,UA,73,EWR,SFO,2025-01-01 12:11:00,2025-01-01 15:24:00,C5,E10,Newark,San Francisco
    FLIGHT#0063,UA,364,PHX,SFO,2025-01-01 11:56:00,2025-01-01 13:11:00,A39,D26,Phoenix,San Francisco
    FLIGHT#0064,AA,221,DFW,SFO,2025-01-01 11:55:00,2025-01-01 13:30:00,A47,B22,Dallas-Fort Worth,San Francisco
    FLIGHT#0065,AA,2293,SFO,DFW,2025-01-01 12:04:00,2025-01-01 17:36:00,C43,E30,San Francisco,Dallas-Fort Worth
    FLIGHT#0066,OO,5199,SFO,SLC,2025-01-01 12:09:00,2025-01-01 14:58:00,A40,E42,San Francisco,Salt Lake City
    FLIGHT#0067,OO,6280,SLC,SFO,2025-01-01 12:13:00,2025-01-01 13:09:00,E16,E36,Salt Lake City,San Francisco
    FLIGHT#0068,OO,6317,RNO,SFO,2025-01-01 12:05:00,2025-01-01 13:09:00,C23,A31,Reno,San Francisco
    FLIGHT#0069,UA,864,SFO,EWR,2025-01-01 12:14:00,2025-01-01 20:38:00,C30,E37,San Francisco,Newark
    FLIGHT#0070,OO,5400,ONT,SFO,2025-01-01 12:25:00,2025-01-01 13:40:00,A48,E19,Ontario,San Francisco
    FLIGHT#0071,UA,236,HNL,SFO,2025-01-01 12:40:00,2025-01-01 19:36:00,A34,C12,Honolulu,San Francisco
    FLIGHT#0072,OO,6343,SNA,SFO,2025-01-01 12:37:00,2025-01-01 13:57:00,A15,D26,Santa Ana,San Francisco
    FLIGHT#0073,UA,1148,SFO,IAD,2025-01-01 13:10:00,2025-01-01 21:02:00,D24,A23,San Francisco,Washington
    FLIGHT#0074,DL,432,JFK,SFO,2025-01-01 13:00:00,2025-01-01 16:28:00,E3,A35,New York,San Francisco
    FLIGHT#0075,B6,1435,SFO,LGB,2025-01-01 13:33:00,2025-01-01 14:47:00,B24,C12,San Francisco,Long Beach
    FLIGHT#0076,OO,6408,SFO,EUG,2025-01-01 13:43:00,2025-01-01 15:10:00,B47,A35,San Francisco,Eugene
    FLIGHT#0077,UA,645,PDX,SFO,2025-01-01 13:27:00,2025-01-01 15:02:00,D7,E4,Portland,San Francisco
    FLIGHT#0078,WN,1812,SFO,SAN,2025-01-01 14:32:00,2025-01-01 15:51:00,B35,D48,San Francisco,San Diego
    FLIGHT#0079,OO,6409,SFO,PDX,2025-01-01 13:42:00,2025-01-01 15:27:00,C10,B17,San Francisco,Portland
    FLIGHT#0080,UA,358,AUS,SFO,2025-01-01 14:31:00,2025-01-01 15:48:00,E33,D21,Austin,San Francisco
    FLIGHT#0081,UA,1728,OGG,SFO,2025-01-01 14:02:00,2025-01-01 20:38:00,A30,C29,Kahului,San Francisco
    FLIGHT#0082,UA,816,SEA,SFO,2025-01-01 13:44:00,2025-01-01 15:38:00,A36,A9,Seattle,San Francisco
    FLIGHT#0083,UA,724,HNL,SFO,2025-01-01 13:59:00,2025-01-01 20:44:00,A14,C9,Honolulu,San Francisco
    FLIGHT#0084,UA,1733,SFO,DEN,2025-01-01 14:38:00,2025-01-01 18:35:00,B27,E32,San Francisco,Denver
    FLIGHT#0085,OO,5543,SFO,BOI,2025-01-01 14:27:00,2025-01-01 17:10:00,E10,B16,San Francisco,Boise
    FLIGHT#0086,UA,1761,IAH,SFO,2025-01-01 14:55:00,2025-01-01 16:45:00,B2,E20,Houston,San Francisco
    FLIGHT#0087,UA,277,DEN,SFO,2025-01-01 14:44:00,2025-01-01 16:04:00,B47,B13,Denver,San Francisco
    FLIGHT#0088,AA,1213,DFW,SFO,2025-01-01 15:14:00,2025-01-01 16:45:00,D11,C31,Dallas-Fort Worth,San Francisco
    FLIGHT#0089,US,407,PHX,SFO,2025-01-01 15:03:00,2025-01-01 16:00:00,C7,D19,Phoenix,San Francisco
    FLIGHT#0090,OO,5367,SFO,RDM,2025-01-01 14:52:00,2025-01-01 16:23:00,A5,E40,San Francisco,Redmond-Bend
    FLIGHT#0091,OO,5454,SMF,SFO,2025-01-01 15:46:00,2025-01-01 16:33:00,A20,A40,Sacramento,San Francisco
    FLIGHT#0092,WN,2687,SFO,LAX,2025-01-01 15:15:00,2025-01-01 16:35:00,D41,B37,San Francisco,Los Angeles
    FLIGHT#0093,CY,932,SFO,LAX,2025-01-01 15:31:00,2025-01-01 16:51:00,A19,E46,San Francisco,Los Angeles
    FLIGHT#0094,WN,3236,SFO,SAN,2025-01-01 15:56:00,2025-01-01 17:23:00,B29,B32,San Francisco,San Diego
    FLIGHT#0095,UA,404,IAH,SFO,2025-01-01 15:56:00,2025-01-01 17:52:00,B15,B42,Houston,San Francisco
    FLIGHT#0096,CY,933,LAX,SFO,2025-01-01 15:42:00,2025-01-01 16:51:00,E16,E7,Los Angeles,San Francisco
    FLIGHT#0097,US,596,SFO,PHX,2025-01-01 15:51:00,2025-01-01 18:52:00,B25,E38,San Francisco,Phoenix
    FLIGHT#0098,AA,379,SFO,DFW,2025-01-01 16:04:00,2025-01-01 21:55:00,A30,D49,San Francisco,Dallas-Fort Worth
    FLIGHT#0099,OO,6280,SFO,SNA,2025-01-01 16:52:00,2025-01-01 18:19:00,B5,C40,San Francisco,Santa Ana
    FLIGHT#0100,UA,735,DEN,SFO,2025-01-01 17:34:00,2025-01-01 19:09:00,C31,B15,Denver,San Francisco
    FLIGHT#0101,OO,5553,PDX,SFO,2025-01-01 16:00:00,2025-01-01 17:36:00,E9,D27,Portland,San Francisco
    FLIGHT#0102,UA,73,SFO,HNL,2025-01-01 16:13:00,2025-01-01 19:52:00,C37,B37,San Francisco,Honolulu
    FLIGHT#0103,UA,587,SEA,SFO,2025-01-01 16:25:00,2025-01-01 18:27:00,B7,B23,Seattle,San Francisco
    FLIGHT#0104,OO,5363,SFO,ONT,2025-01-01 16:09:00,2025-01-01 17:28:00,D21,E29,San Francisco,Ontario
    FLIGHT#0105,OO,6386,SFO,BOI,2025-01-01 16:12:00,2025-01-01 18:58:00,D48,E33,San Francisco,Boise
    FLIGHT#0106,CY,27,JFK,SFO,2025-01-01 16:28:00,2025-01-01 20:19:00,C6,E14,New York,San Francisco
    FLIGHT#0107,OO,5190,SFO,ASE,2025-01-01 16:24:00,2025-01-01 19:42:00,C50,B44,San Francisco,Aspen
    FLIGHT#0108,CY,746,SFO,SEA,2025-01-01 16:40:00,2025-01-01 18:32:00,D35,C24,San Francisco,Seattle
    FLIGHT#0109,UA,1640,SFO,ORD,2025-01-01 17:01:00,2025-01-01 23:02:00,E27,C24,San Francisco,Chicago
    FLIGHT#0110,OO,6221,MCI,SFO,2025-01-01 17:28:00,2025-01-01 19:08:00,E2,C36,Kansas City,San Francisco
    FLIGHT#0111,UA,486,SFO,LAS,2025-01-01 16:47:00,2025-01-01 18:16:00,C42,B47,San Francisco,Las Vegas
    FLIGHT#0112,CY,2,DCA,SFO,2025-01-01 17:01:00,2025-01-01 20:07:00,E43,A33,Washington,San Francisco
    FLIGHT#0113,B6,1436,LGB,SFO,2025-01-01 16:59:00,2025-01-01 18:35:00,B12,B22,Long Beach,San Francisco
    FLIGHT#0114,WN,694,PHX,SFO,2025-01-01 17:11:00,2025-01-01 18:05:00,B44,B18,Phoenix,San Francisco
    FLIGHT#0115,OO,5635,MMH,SFO,2025-01-01 17:00:00,2025-01-01 18:01:00,A25,D7,Mammoth Lakes,San Francisco
    FLIGHT#0116,AS,341,PSP,SFO,2025-01-01 18:25:00,2025-01-01 19:46:00,A11,E18,Palm Springs,San Francisco
    FLIGHT#0117,OO,6364,PSP,SFO,2025-01-01 18:01:00,2025-01-01 19:31:00,A14,B47,Palm Springs,San Francisco
    FLIGHT#0118,OO,5418,SBP,SFO,2025-01-01 17:17:00,2025-01-01 18:15:00,B24,D17,San Luis Obispo,San Francisco
    FLIGHT#0119,AA,197,SFO,ORD,2025-01-01 17:21:00,2025-01-01 23:33:00,D25,E49,San Francisco,Chicago
    FLIGHT#0120,CY,720,SFO,DAL,2025-01-01 18:25:00,2025-01-01 23:43:00,B24,A2,San Francisco,Dallas
    FLIGHT#0121,OO,6268,FAT,SFO,2025-01-01 17:33:00,2025-01-01 18:39:00,E35,D25,Fresno,San Francisco
    FLIGHT#0122,OO,5615,SFO,EUG,2025-01-01 17:45:00,2025-01-01 19:18:00,B11,A34,San Francisco,Eugene
    FLIGHT#0123,CY,960,SFO,SAN,2025-01-01 17:55:00,2025-01-01 19:23:00,D23,E44,San Francisco,San Diego
    FLIGHT#0124,AA,1393,DFW,SFO,2025-01-01 17:51:00,2025-01-01 19:25:00,E11,A41,Dallas-Fort Worth,San Francisco
    FLIGHT#0125,OO,6352,BOI,SFO,2025-01-01 17:58:00,2025-01-01 18:46:00,B31,D23,Boise,San Francisco
    FLIGHT#0126,DL,1151,SFO,HNL,2025-01-01 17:53:00,2025-01-01 21:34:00,E29,B45,San Francisco,Honolulu
    FLIGHT#0127,OO,5227,SFO,SAN,2025-01-01 19:07:00,2025-01-01 20:31:00,A35,B38,San Francisco,San Diego
    FLIGHT#0128,CY,941,LAX,SFO,2025-01-01 18:19:00,2025-01-01 19:34:00,C33,B44,Los Angeles,San Francisco
    FLIGHT#0129,UA,1044,EWR,SFO,2025-01-01 19:19:00,2025-01-01 22:53:00,D50,D26,Newark,San Francisco
    FLIGHT#0130,CY,211,ORD,SFO,2025-01-01 18:41:00,2025-01-01 21:14:00,D13,E45,Chicago,San Francisco
    FLIGHT#0131,UA,685,ORD,SFO,2025-01-01 18:51:00,2025-01-01 21:04:00,D26,D45,Chicago,San Francisco
    FLIGHT#0132,UA,370,SFO,SEA,2025-01-01 18:49:00,2025-01-01 20:41:00,B6,E20,San Francisco,Seattle
    FLIGHT#0133,UA,1433,IAH,SFO,2025-01-01 19:45:00,2025-01-01 21:39:00,C42,C48,Houston,San Francisco
    FLIGHT#0134,UA,1172,DEN,SFO,2025-01-01 20:19:00,2025-01-01 22:37:00,E31,D43,Denver,San Francisco
    FLIGHT#0135,CY,593,PSP,SFO,2025-01-01 19:09:00,2025-01-01 20:26:00,C23,C43,Palm Springs,San Francisco
    FLIGHT#0136,UA,1564,SFO,ORD,2025-01-01 19:14:00,2025-01-02 01:14:00,E3,C48,San Francisco,Chicago
    FLIGHT#0137,UA,741,ORD,SFO,2025-01-01 19:18:00,2025-01-01 21:58:00,A25,B38,Chicago,San Francisco
    FLIGHT#0138,WN,600,SFO,SNA,2025-01-01 19:36:00,2025-01-01 20:53:00,D21,D11,San Francisco,Santa Ana
    FLIGHT#0139,F9,664,SFO,DEN,2025-01-01 19:31:00,2025-01-01 23:13:00,E11,E12,San Francisco,Denver
    FLIGHT#0140,OO,4995,LAS,SFO,2025-01-01 19:18:00,2025-01-01 20:58:00,B42,B49,Las Vegas,San Francisco
    FLIGHT#0141,CY,717,DAL,SFO,2025-01-01 19:31:00,2025-01-01 21:02:00,A42,D32,Dallas,San Francisco
    FLIGHT#0142,UA,1243,SFO,DEN,2025-01-01 19:38:00,2025-01-01 23:15:00,B34,A3,San Francisco,Denver
    FLIGHT#0143,UA,560,IAD,SFO,2025-01-01 19:41:00,2025-01-01 22:29:00,D9,D33,Washington,San Francisco
    FLIGHT#0144,WN,2791,LAX,SFO,2025-01-01 19:45:00,2025-01-01 20:57:00,C49,C22,Los Angeles,San Francisco
    FLIGHT#0145,WN,2079,SAN,SFO,2025-01-01 21:03:00,2025-01-01 22:33:00,A25,E24,San Diego,San Francisco
    FLIGHT#0146,OO,6356,SFO,SLC,2025-01-01 19:57:00,2025-01-01 22:49:00,A28,C45,San Francisco,Salt Lake City
    FLIGHT#0147,OO,6290,PSP,SFO,2025-01-01 19:48:00,2025-01-01 21:12:00,A33,E27,Palm Springs,San Francisco
    FLIGHT#0148,OO,5363,ONT,SFO,2025-01-01 20:27:00,2025-01-01 21:54:00,A14,E17,Ontario,San Francisco
    FLIGHT#0149,OO,5206,SFO,PHX,2025-01-01 20:12:00,2025-01-01 23:05:00,D22,E31,San Francisco,Phoenix
    FLIGHT#0150,B6,1136,LGB,SFO,2025-01-01 20:41:00,2025-01-01 21:56:00,B7,E45,Long Beach,San Francisco
    FLIGHT#0151,US,736,PHX,SFO,2025-01-01 21:12:00,2025-01-01 22:11:00,B22,E33,Phoenix,San Francisco
    FLIGHT#0152,AA,1611,DFW,SFO,2025-01-01 21:42:00,2025-01-01 23:37:00,A13,B44,Dallas-Fort Worth,San Francisco
    FLIGHT#0153,UA,1241,SFO,EWR,2025-01-01 21:44:00,2025-01-02 05:55:00,D3,A17,San Francisco,Newark
    FLIGHT#0154,UA,1726,OGG,SFO,2025-01-01 22:19:00,2025-01-02 04:56:00,C35,B23,Kahului,San Francisco
    FLIGHT#0155,US,898,SFO,CLT,2025-01-01 22:29:00,2025-01-02 06:18:00,D7,D15,San Francisco,Charlotte
    FLIGHT#0156,UA,1669,SFO,PHL,2025-01-01 22:26:00,2025-01-02 06:30:00,B13,A12,San Francisco,Philadelphia
    FLIGHT#0157,UA,362,SFO,BWI,2025-01-01 22:31:00,2025-01-02 06:36:00,E32,A36,San Francisco,Baltimore
    FLIGHT#0158,OO,6220,SFO,RNO,2025-01-01 22:25:00,2025-01-01 23:23:00,D18,A31,San Francisco,Reno
    FLIGHT#0159,OO,6376,SFO,MRY,2025-01-01 22:35:00,2025-01-01 23:19:00,C24,E48,San Francisco,Monterey
    FLIGHT#0160,UA,522,SFO,PDX,2025-01-01 22:36:00,2025-01-02 00:31:00,B17,A40,San Francisco,Portland
    FLIGHT#0161,UA,1728,SFO,BOS,2025-01-01 22:46:00,2025-01-02 07:20:00,C40,E43,San Francisco,Boston
    FLIGHT#0162,UA,724,SFO,LAX,2025-01-01 22:45:00,2025-01-02 00:29:00,E43,B23,San Francisco,Los Angeles
    FLIGHT#0163,UA,1681,SFO,CLE,2025-01-01 23:03:00,2025-01-02 06:45:00,D26,E19,San Francisco,Cleveland
    FLIGHT#0164,UA,1580,OGG,SFO,2025-01-01 23:24:00,2025-01-02 06:07:00,E38,A35,Kahului,San Francisco
    FLIGHT#0165,DL,806,SFO,MSP,2025-01-02 00:22:00,2025-01-02 05:57:00,B27,A3,San Francisco,Minneapolis
    FLIGHT#0166,OO,5467,ONT,SFO,2025-01-02 05:02:00,2025-01-02 06:18:00,E8,C32,Ontario,San Francisco
    FLIGHT#0167,WN,1989,SFO,LAS,2025-01-02 05:35:00,2025-01-02 06:46:00,A21,D15,San Francisco,Las Vegas
    FLIGHT#0168,UA,1619,BOS,SFO,2025-01-02 05:56:00,2025-01-02 09:56:00,C46,E11,Boston,San Francisco
    FLIGHT#0169,UA,1076,SFO,ORD,2025-01-02 05:58:00,2025-01-02 12:00:00,E27,A31,San Francisco,Chicago
    FLIGHT#0170,F9,1056,SFO,IAH,2025-01-02 05:59:00,2025-01-02 12:09:00,A29,B13,San Francisco,Houston
    FLIGHT#0171,WN,2242,LAX,SFO,2025-01-02 06:22:00,2025-01-02 07:36:00,C12,D43,Los Angeles,San Francisco
    FLIGHT#0172,B6,735,SFO,LGB,2025-01-02 06:01:00,2025-01-02 07:20:00,C2,C37,San Francisco,Long Beach
    FLIGHT#0173,WN,3859,SFO,MDW,2025-01-02 06:27:00,2025-01-02 12:26:00,A28,E38,San Francisco,Chicago
    FLIGHT#0174,UA,1285,SFO,ORD,2025-01-02 06:43:00,2025-01-02 12:47:00,B43,A35,San Francisco,Chicago
    FLIGHT#0175,WN,1726,SFO,PHX,2025-01-02 06:32:00,2025-01-02 09:20:00,C16,B2,San Francisco,Phoenix
    FLIGHT#0176,OO,5186,SFO,SAN,2025-01-02 06:25:00,2025-01-02 07:59:00,C47,C1,San Francisco,San Diego
    FLIGHT#0177,UA,566,PIT,SFO,2025-01-02 07:15:00,2025-01-02 09:46:00,C39,E39,Pittsburgh,San Francisco
    FLIGHT#0178,UA,1195,MCO,SFO,2025-01-02 07:18:00,2025-01-02 10:05:00,A47,C43,Orlando,San Francisco
    FLIGHT#0179,CY,925,LAX,SFO,2025-01-02 06:57:00,2025-01-02 08:07:00,E29,C19,Los Angeles,San Francisco
    FLIGHT#0180,UA,761,ORD,SFO,2025-01-02 07:07:00,2025-01-02 09:34:00,B22,A3,Chicago,San Francisco
    FLIGHT#0181,UA,758,SFO,JFK,2025-01-02 07:07:00,2025-01-02 15:53:00,B15,B39,San Francisco,New York
    FLIGHT#0182,CY,67,IAD,SFO,2025-01-02 07:07:00,2025-01-02 10:00:00,D24,E33,Washington,San Francisco
    FLIGHT#0183,UA,706,SEA,SFO,2025-01-02 07:05:00,2025-01-02 08:59:00,D9,C28,Seattle,San Francisco
    FLIGHT#0184,OO,5441,SFO,SBP,2025-01-02 07:06:00,2025-01-02 08:11:00,B3,B29,San Francisco,San Luis Obispo
    FLIGHT#0185,CY,202,SFO,ORD,2025-01-02 07:18:00,2025-01-02 13:23:00,C16,D10,San Francisco,Chicago
    FLIGHT#0186,CY,710,SFO,DAL,2025-01-02 07:16:00,2025-01-02 12:43:00,D1,E13,San Francisco,Dallas
    FLIGHT#0187,AA,24,SFO,JFK,2025-01-02 07:06:00,2025-01-02 15:29:00,C38,D2,San Francisco,New York
    FLIGHT#0188,UA,72,HNL,SFO,2025-01-02 07:28:00,2025-01-02 14:20:00,C8,E18,Honolulu,San Francisco
    FLIGHT#0189,UA,1278,ATL,SFO,2025-01-02 07:30:00,2025-01-02 09:41:00,C16,B21,Atlanta,San Francisco
    FLIGHT#0190,UA,498,SFO,SAN,2025-01-02 07:20:00,2025-01-02 08:38:00,B42,E44,San Francisco,San Diego
    FLIGHT#0191,CY,183,EWR,SFO,2025-01-02 07:26:00,2025-01-02 10:51:00,B33,A12,Newark,San Francisco
    FLIGHT#0192,AA,76,SFO,LAX,2025-01-02 07:22:00,2025-01-02 08:44:00,E28,B18,San Francisco,Los Angeles
    FLIGHT#0193,WN,2325,DEN,SFO,2025-01-02 07:40:00,2025-01-02 09:03:00,A5,A17,Denver,San Francisco
    FLIGHT#0194,WN,1545,LAX,SFO,2025-01-02 07:48:00,2025-01-02 09:02:00,D42,A25,Los Angeles,San Francisco
    FLIGHT#0195,OO,5196,SFO,PDX,2025-01-02 07:46:00,2025-01-02 09:32:00,B12,B11,San Francisco,Portland
    FLIGHT#0196,UA,1053,DEN,SFO,2025-01-02 08:06:00,2025-01-02 09:41:00,C37,E7,Denver,San Francisco
    FLIGHT#0197,AA,23,DFW,SFO,2025-01-02 07:53:00,2025-01-02 09:26:00,D24,C34,Dallas-Fort Worth,San Francisco
    FLIGHT#0198,UA,322,SNA,SFO,2025-01-02 07:53:00,2025-01-02 09:17:00,E22,D32,Santa Ana,San Francisco
    FLIGHT#0199,UA,500,IND,SFO,2025-01-02 08:02:00,2025-01-02 09:46:00,D47,B25,Indianapolis,San Francisco
    FLIGHT#0200,UA,662,SAN,SFO,2025-01-02 08:51:00,2025-01-02 10:38:00,C36,B37,San Diego,San Francisco
    FLIGHT#0201,UA,834,LAS,SFO,2025-01-02 07:51:00,2025-01-02 09:17:00,B24,E14,Las Vegas,San Francisco
    FLIGHT#0202,CY,1930,SFO,LAX,2025-01-02 07:58:00,2025-01-02 09:29:00,D1,E49,San Francisco,Los Angeles
    FLIGHT#0203,UA,1454,ORD,SFO,2025-01-02 08:09:00,2025-01-02 10:54:00,C45,D18,Chicago,San Francisco
    FLIGHT#0204,AA,1368,SFO,DFW,2025-01-02 08:11:00,2025-01-02 13:35:00,A24,D28,San Francisco,Dallas-Fort Worth
    FLIGHT#0205,UA,460,LAX,SFO,2025-01-02 08:22:00,2025-01-02 09:53:00,E4,D14,Los Angeles,San Francisco
    FLIGHT#0206,UA,1547,SFO,BOS,2025-01-02 08:30:00,2025-01-02 16:52:00,B24,D37,San Francisco,Boston
    FLIGHT#0207,AA,242,SFO,ORD,2025-01-02 08:28:00,2025-01-02 14:41:00,D10,B31,San Francisco,Chicago
    FLIGHT#0208,OO,5538,MFR,SFO,2025-01-02 08:15:00,2025-01-02 09:44:00,D3,B43,Medford,San Francisco
    FLIGHT#0209,UA,1739,SFO,EWR,2025-01-02 08:56:00,2025-01-02 17:03:00,B18,A15,San Francisco,Newark
    FLIGHT#0210,DL,745,DTW,SFO,2025-01-02 08:36:00,2025-01-02 10:43:00,B2,D29,Detroit,San Francisco
    FLIGHT#0211,OO,5445,SFO,SBP,2025-01-02 10:35:00,2025-01-02 11:50:00,D39,A1,San Francisco,San Luis Obispo
    FLIGHT#0212,OO,5223,SLC,SFO,2025-01-02 08:52:00,2025-01-02 09:50:00,C17,C19,Salt Lake City,San Francisco
    FLIGHT#0213,UA,1615,SFO,IAD,2025-01-02 08:44:00,2025-01-02 16:41:00,A19,C46,San Francisco,Washington
    FLIGHT#0214,AA,1435,ORD,SFO,2025-01-02 08:43:00,2025-01-02 11:08:00,B49,B11,Chicago,San Francisco
    FLIGHT#0215,HA,11,SFO,HNL,2025-01-02 09:28:00,2025-01-02 13:38:00,E28,B21,San Francisco,Honolulu
    FLIGHT#0216,OO,6373,SFO,DFW,2025-01-02 08:51:00,2025-01-02 14:40:00,B42,D13,San Francisco,Dallas-Fort Worth
    FLIGHT#0217,UA,479,SFO,LAX,2025-01-02 11:15:00,2025-01-02 12:47:00,E32,B7,San Francisco,Los Angeles
    FLIGHT#0218,UA,361,SFO,LIH,2025-01-02 09:33:00,2025-01-02 13:10:00,A45,C26,San Francisco,Lihue
    FLIGHT#0219,WN,2074,SFO,SNA,2025-01-02 09:08:00,2025-01-02 10:18:00,A6,A49,San Francisco,Santa Ana
    FLIGHT#0220,CY,84,SFO,IAD,2025-01-02 09:20:00,2025-01-02 17:25:00,A37,B4,San Francisco,Washington
    FLIGHT#0221,WN,2969,SAN,SFO,2025-01-02 09:35:00,2025-01-02 10:59:00,B50,A43,San Diego,San Francisco
    FLIGHT#0222,UA,1249,SFO,MCO,2025-01-02 10:10:00,2025-01-02 18:15:00,D13,E20,San Francisco,Orlando
    FLIGHT#0223,WN,1820,SFO,LAS,2025-01-02 09:52:00,2025-01-02 11:19:00,B19,D16,San Francisco,Las Vegas
    FLIGHT#0224,WN,2414,SFO,PHX,2025-01-02 09:57:00,2025-01-02 12:52:00,E1,C5,San Francisco,Phoenix
    FLIGHT#0225,UA,698,SEA,SFO,2025-01-02 09:54:00,2025-01-02 11:59:00,E37,D34,Seattle,San Francisco
    FLIGHT#0226,AS,303,SFO,SEA,2025-01-02 10:06:00,2025-01-02 12:11:00,D36,C9,San Francisco,Seattle
    FLIGHT#0227,WN,3323,SFO,DEN,2025-01-02 10:40:00,2025-01-02 13:59:00,A4,E35,San Francisco,Denver
    FLIGHT#0228,OO,6286,SBA,SFO,2025-01-02 10:23:00,2025-01-02 11:47:00,B46,A8,Santa Barbara,San Francisco
    FLIGHT#0229,OO,5603,PHX,SFO,2025-01-02 10:29:00,2025-01-02 11:41:00,A2,C22,Phoenix,San Francisco
    FLIGHT#0230,CY,218,SFO,AUS,2025-01-02 10:28:00,2025-01-02 15:56:00,E49,C21,San Francisco,Austin
    FLIGHT#0231,OO,5335,CEC,SFO,2025-01-02 10:32:00,2025-01-02 12:09:00,D29,D17,Crescent City,San Francisco
    FLIGHT#0232,OO,5646,SFO,SBA,2025-01-02 10:33:00,2025-01-02 11:54:00,A50,E40,San Francisco,Santa Barbara
    FLIGHT#0233,OO,5635,SFO,SNA,2025-01-02 11:22:00,2025-01-02 12:55:00,C17,D47,San Francisco,Santa Ana
    FLIGHT#0234,OO,6380,SFO,BOI,2025-01-02 10:41:00,2025-01-02 13:18:00,B18,C15,San Francisco,Boise
    FLIGHT#0235,UA,662,SFO,MSP,2025-01-02 10:52:00,2025-01-02 16:39:00,B6,E11,San Francisco,Minneapolis
    FLIGHT#0236,OO,6270,SFO,RNO,2025-01-02 10:43:00,2025-01-02 11:52:00,C15,E10,San Francisco,Reno
    FLIGHT#0237,OO,4975,SFO,TUS,2025-01-02 12:23:00,2025-01-02 15:18:00,D5,C12,San Francisco,Tucson
    FLIGHT#0238,UA,322,SFO,SEA,2025-01-02 10:49:00,2025-01-02 12:54:00,E29,D3,San Francisco,Seattle
    FLIGHT#0239,WN,1009,LAX,SFO,2025-01-02 11:33:00,2025-01-02 12:45:00,E12,C30,Los Angeles,San Francisco
    FLIGHT#0240,OO,4966,SFO,SUN,2025-01-02 11:11:00,2025-01-02 14:15:00,D39,D21,San Francisco,Hailey
    FLIGHT#0241,UA,753,SFO,AUS,2025-01-02 11:40:00,2025-01-02 17:33:00,B30,D47,San Francisco,Austin
    FLIGHT#0242,UA,242,SFO,SAN,2025-01-02 12:00:00,2025-01-02 13:24:00,B27,E27,San Francisco,San Diego
    FLIGHT#0243,UA,390,SEA,SFO,2025-01-02 11:10:00,2025-01-02 13:08:00,A17,A23,Seattle,San Francisco
    FLIGHT#0244,OO,6336,RNO,SFO,2025-01-02 11:17:00,2025-01-02 12:17:00,A45,E39,Reno,San Francisco
    FLIGHT#0245,OO,5250,MRY,SFO,2025-01-02 11:12:00,2025-01-02 12:28:00,B33,E11,Monterey,San Francisco
    FLIGHT#0246,UA,317,SAN,SFO,2025-01-02 12:10:00,2025-01-02 13:40:00,A14,A42,San Diego,San Francisco
    FLIGHT#0247,OO,5652,SFO,PSP,2025-01-02 12:14:00,2025-01-02 13:50:00,E17,B17,San Francisco,Palm Springs
    FLIGHT#0248,UA,1195,SFO,ORD,2025-01-02 11:56:00,2025-01-02 18:12:00,B39,B19,San Francisco,Chicago
    FLIGHT#0249,CY,714,SFO,DAL,2025-01-02 11:40:00,2025-01-02 17:22:00,C50,A19,San Francisco,Dallas
    FLIGHT#0250,WN,2779,LAX,SFO,2025-01-02 11:58:00,2025-01-02 13:09:00,B19,C27,Los Angeles,San Francisco
    FLIGHT#0251,UA,1722,SFO,IAH,2025-01-02 11:58:00,2025-01-02 18:29:00,E12,D6,San Francisco,Houston
    FLIGHT#0252,UA,766,JFK,SFO,2025-01-02 11:55:00,2025-01-02 15:21:00,A16,C18,New York,San Francisco
    FLIGHT#0253,UA,1437,ORD,SFO,2025-01-02 12:36:00,2025-01-02 15:09:00,A33,E19,Chicago,San Francisco
    FLIGHT#0254,UA,1294,LAS,SFO,2025-01-02 12:20:00,2025-01-02 13:45:00,E7,A10,Las Vegas,San Francisco
    FLIGHT#0255,UA,1266,SEA,SFO,2025-01-02 12:13:00,2025-01-02 14:11:00,B32,C18,Seattle,San Francisco
    FLIGHT#0256,UA,1668,SFO,EWR,2025-01-02 12:24:00,2025-01-02 20:34:00,D37,A30,San Francisco,Newark
    FLIGHT#0257,OO,6304,BUR,SFO,2025-01-02 12:31:00,2025-01-02 14:01:00,C7,C4,Burbank,San Francisco
    FLIGHT#0258,WN,4391,SFO,STL,2025-01-02 12:55:00,2025-01-02 18:36:00,A12,D39,San Francisco,St. Louis
    FLIGHT#0259,UA,236,HNL,SFO,2025-01-02 13:19:00,2025-01-02 20:12:00,B25,D26,Honolulu,San Francisco
    FLIGHT#0260,UA,1705,SFO,IAH,2025-01-02 12:51:00,2025-01-02 18:50:00,E11,E32,San Francisco,Houston
    FLIGHT#0261,OO,6490,EUG,SFO,2025-01-02 13:00:00,2025-01-02 14:21:00,D34,D29,Eugene,San Francisco
    FLIGHT#0262,UA,820,SFO,ORD,2025-01-02 13:02:00,2025-01-02 19:11:00,B45,E24,San Francisco,Chicago
    FLIGHT#0263,AS,381,SFO,PDX,2025-01-02 12:52:00,2025-01-02 14:34:00,E11,B3,San Francisco,Portland
    FLIGHT#0264,AS,305,SFO,SEA,2025-01-02 12:59:00,2025-01-02 15:10:00,C34,C41,San Francisco,Seattle
    FLIGHT#0265,OO,6273,SFO,SLC,2025-01-02 12:57:00,2025-01-02 15:50:00,C3,D36,San Francisco,Salt Lake City
    FLIGHT#0266,DL,2254,SFO,DTW,2025-01-02 13:05:00,2025-01-02 20:29:00,E10,D30,San Francisco,Detroit
    FLIGHT#0267,B6,1435,SFO,LGB,2025-01-02 13:34:00,2025-01-02 15:02:00,B31,D48,San Francisco,Long Beach
    FLIGHT#0268,F9,661,DEN,SFO,2025-01-02 13:11:00,2025-01-02 14:35:00,C3,E38,Denver,San Francisco
    FLIGHT#0269,UA,1092,EWR,SFO,2025-01-02 13:44:00,2025-01-02 17:05:00,D13,A41,Newark,San Francisco
    FLIGHT#0270,US,1812,SFO,CLT,2025-01-02 13:32:00,2025-01-02 21:36:00,A50,A5,San Francisco,Charlotte
    FLIGHT#0271,WN,2598,LAX,SFO,2025-01-02 13:48:00,2025-01-02 14:54:00,E23,C38,Los Angeles,San Francisco
    FLIGHT#0272,UA,216,SFO,SNA,2025-01-02 15:23:00,2025-01-02 16:41:00,C23,E6,San Francisco,Santa Ana
    FLIGHT#0273,UA,1060,SFO,DCA,2025-01-02 15:19:00,2025-01-02 23:18:00,D14,B18,San Francisco,Washington
    FLIGHT#0274,OO,6326,BOI,SFO,2025-01-02 13:51:00,2025-01-02 14:24:00,D49,A43,Boise,San Francisco
    FLIGHT#0275,UA,724,HNL,SFO,2025-01-02 14:43:00,2025-01-02 21:33:00,B26,A50,Honolulu,San Francisco
    FLIGHT#0276,OO,5463,SFO,SMF,2025-01-02 13:50:00,2025-01-02 14:32:00,A13,D23,San Francisco,Sacramento
    FLIGHT#0277,UA,698,SFO,MCO,2025-01-02 14:24:00,2025-01-02 22:33:00,D49,B2,San Francisco,Orlando
    FLIGHT#0278,CY,1178,SFO,EWR,2025-01-02 13:58:00,2025-01-02 22:06:00,C27,D9,San Francisco,Newark
    FLIGHT#0279,OO,6425,TUS,SFO,2025-01-02 14:50:00,2025-01-02 15:54:00,E29,D17,Tucson,San Francisco
    FLIGHT#0280,OO,5615,MFR,SFO,2025-01-02 13:55:00,2025-01-02 15:15:00,B44,E27,Medford,San Francisco
    FLIGHT#0281,WN,3450,SFO,MDW,2025-01-02 14:50:00,2025-01-02 20:46:00,D39,B44,San Francisco,Chicago
    FLIGHT#0282,UA,1733,SFO,DEN,2025-01-02 15:11:00,2025-01-02 18:47:00,D8,D2,San Francisco,Denver
    FLIGHT#0283,UA,1263,KOA,SFO,2025-01-02 14:59:00,2025-01-02 21:49:00,C39,E3,Kona,San Francisco
    FLIGHT#0284,UA,1568,SFO,RDU,2025-01-02 14:55:00,2025-01-02 23:03:00,A30,A26,San Francisco,Raleigh-durham
    FLIGHT#0285,UA,1159,SFO,BOS,2025-01-02 14:57:00,2025-01-02 23:23:00,C19,A30,San Francisco,Boston
    FLIGHT#0286,OO,5652,PSP,SFO,2025-01-02 14:52:00,2025-01-02 16:46:00,D37,A5,Palm Springs,San Francisco
    FLIGHT#0287,US,749,CLT,SFO,2025-01-02 15:28:00,2025-01-02 17:47:00,D17,D38,Charlotte,San Francisco
    FLIGHT#0288,UA,1491,SFO,DEN,2025-01-02 15:09:00,2025-01-02 18:45:00,E31,E36,San Francisco,Denver
    FLIGHT#0289,WN,2687,SFO,LAX,2025-01-02 15:27:00,2025-01-02 16:31:00,E42,B13,San Francisco,Los Angeles
    FLIGHT#0290,DL,2040,SFO,JFK,2025-01-02 15:09:00,2025-01-02 23:20:00,E2,D33,San Francisco,New York
    FLIGHT#0291,OO,5549,SFO,AUS,2025-01-02 15:24:00,2025-01-02 21:11:00,B42,C1,San Francisco,Austin
    FLIGHT#0292,AS,308,SEA,SFO,2025-01-02 15:22:00,2025-01-02 17:18:00,C39,A46,Seattle,San Francisco
    FLIGHT#0293,F9,662,SFO,DEN,2025-01-02 15:16:00,2025-01-02 18:50:00,C5,A8,San Francisco,Denver
    FLIGHT#0294,UA,735,DEN,SFO,2025-01-02 16:00:00,2025-01-02 17:19:00,A32,C24,Denver,San Francisco
    FLIGHT#0295,UA,404,IAH,SFO,2025-01-02 17:26:00,2025-01-02 19:32:00,C14,A7,Houston,San Francisco
    FLIGHT#0296,CY,210,SFO,ORD,2025-01-02 15:42:00,2025-01-02 21:44:00,A31,B46,San Francisco,Chicago
    FLIGHT#0297,AS,315,SFO,SEA,2025-01-02 19:47:00,2025-01-02 22:16:00,A8,B49,San Francisco,Seattle
    FLIGHT#0298,WN,1901,SAN,SFO,2025-01-02 15:48:00,2025-01-02 17:09:00,A23,B38,San Diego,San Francisco
    FLIGHT#0299,OO,5580,SFO,SNA,2025-01-02 16:35:00,2025-01-02 18:03:00,D40,E43,San Francisco,Santa Ana
    FLIGHT#0300,AA,2265,DFW,SFO,2025-01-02 16:07:00,2025-01-02 17:41:00,A4,A23,Dallas-Fort Worth,San Francisco
    FLIGHT#0301,OO,5363,SFO,ONT,2025-01-02 16:15:00,2025-01-02 17:32:00,A10,A26,San Francisco,Ontario
    FLIGHT#0302,OO,5609,SFO,PDX,2025-01-02 17:01:00,2025-01-02 18:42:00,E49,D4,San Francisco,Portland
    FLIGHT#0303,OO,5645,MFR,SFO,2025-01-02 16:15:00,2025-01-02 17:35:00,A25,E49,Medford,San Francisco
    FLIGHT#0304,OO,4976,SFO,STL,2025-01-02 16:37:00,2025-01-02 22:27:00,C35,A2,San Francisco,St. Louis
    FLIGHT#0305,OO,6217,BUR,SFO,2025-01-02 16:44:00,2025-01-02 17:55:00,D50,A14,Burbank,San Francisco
    FLIGHT#0306,WN,1276,SFO,LAX,2025-01-02 16:25:00,2025-01-02 17:32:00,B8,D22,San Francisco,Los Angeles
    FLIGHT#0307,OO,6238,ACV,SFO,2025-01-02 16:25:00,2025-01-02 17:36:00,E24,A39,Arcata CA,San Francisco
    FLIGHT#0308,OO,5190,SFO,ASE,2025-01-02 17:08:00,2025-01-02 20:17:00,C9,E6,San Francisco,Aspen
    FLIGHT#0309,OO,4627,SFO,SLC,2025-01-02 16:43:00,2025-01-02 19:41:00,C32,C4,San Francisco,Salt Lake City
    FLIGHT#0310,OO,6476,SFO,MFR,2025-01-02 16:38:00,2025-01-02 18:16:00,B26,D33,San Francisco,Medford
    FLIGHT#0311,UA,486,SFO,LAS,2025-01-02 16:52:00,2025-01-02 18:24:00,D25,E8,San Francisco,Las Vegas
    FLIGHT#0312,DL,214,SFO,DTW,2025-01-02 19:09:00,2025-01-03 02:20:00,C6,E35,San Francisco,Detroit
    FLIGHT#0313,CY,592,SFO,PSP,2025-01-02 16:54:00,2025-01-02 18:14:00,B40,B9,San Francisco,Palm Springs
    FLIGHT#0314,UA,529,SNA,SFO,2025-01-02 17:01:00,2025-01-02 18:15:00,D28,B30,Santa Ana,San Francisco
    FLIGHT#0315,UA,372,MSP,SFO,2025-01-02 17:39:00,2025-01-02 19:19:00,E28,C18,Minneapolis,San Francisco
    FLIGHT#0316,AA,1213,SFO,DFW,2025-01-02 18:20:00,2025-01-03 00:19:00,E39,A42,San Francisco,Dallas-Fort Worth
    FLIGHT#0317,AS,341,PSP,SFO,2025-01-02 17:15:00,2025-01-02 18:37:00,D40,D15,Palm Springs,San Francisco
    FLIGHT#0318,OO,5418,SBP,SFO,2025-01-02 18:11:00,2025-01-02 19:09:00,C31,D39,San Luis Obispo,San Francisco
    FLIGHT#0319,CY,193,EWR,SFO,2025-01-02 17:29:00,2025-01-02 20:59:00,E20,E40,Newark,San Francisco
    FLIGHT#0320,UA,1723,SFO,KOA,2025-01-02 17:26:00,2025-01-02 21:02:00,E18,D41,San Francisco,Kona
    FLIGHT#0321,UA,1762,SFO,IAH,2025-01-02 17:37:00,2025-01-02 23:11:00,C40,C37,San Francisco,Houston
    FLIGHT#0322,CY,720,SFO,DAL,2025-01-02 17:23:00,2025-01-02 22:47:00,D13,D23,San Francisco,Dallas
    FLIGHT#0323,CY,963,SAN,SFO,2025-01-02 17:36:00,2025-01-02 19:05:00,B1,E32,San Diego,San Francisco
    FLIGHT#0324,OO,5255,SFO,EUG,2025-01-02 17:27:00,2025-01-02 19:02:00,C7,B2,San Francisco,Eugene
    FLIGHT#0325,CY,960,SFO,SAN,2025-01-02 17:32:00,2025-01-02 18:50:00,C3,C4,San Francisco,San Diego
    FLIGHT#0326,UA,1419,MSY,SFO,2025-01-02 17:46:00,2025-01-02 20:07:00,C26,E49,New Orleans,San Francisco
    FLIGHT#0327,WN,1585,SFO,LAX,2025-01-02 17:46:00,2025-01-02 19:31:00,A12,A12,San Francisco,Los Angeles
    FLIGHT#0328,DL,1505,MSP,SFO,2025-01-02 17:47:00,2025-01-02 19:48:00,A33,B37,Minneapolis,San Francisco
    FLIGHT#0329,US,686,PHX,SFO,2025-01-02 17:59:00,2025-01-02 19:05:00,C28,C11,Phoenix,San Francisco
    FLIGHT#0330,AS,302,SEA,SFO,2025-01-02 18:00:00,2025-01-02 20:04:00,B28,E17,Seattle,San Francisco
    FLIGHT#0331,UA,1552,RDU,SFO,2025-01-02 18:08:00,2025-01-02 20:51:00,B15,D48,Raleigh-durham,San Francisco
    FLIGHT#0332,UA,697,LAS,SFO,2025-01-02 17:55:00,2025-01-02 19:14:00,E37,B31,Las Vegas,San Francisco
    FLIGHT#0333,AA,219,LAX,SFO,2025-01-02 17:54:00,2025-01-02 19:05:00,C27,E34,Los Angeles,San Francisco
    FLIGHT#0334,OO,5425,ONT,SFO,2025-01-02 18:04:00,2025-01-02 19:23:00,C46,A14,Ontario,San Francisco
    FLIGHT#0335,WN,1861,SFO,PHX,2025-01-02 20:49:00,2025-01-02 23:31:00,C31,B42,San Francisco,Phoenix
    FLIGHT#0336,OO,5631,SFO,BUR,2025-01-02 18:10:00,2025-01-02 19:29:00,D26,E29,San Francisco,Burbank
    FLIGHT#0337,UA,720,SFO,AUS,2025-01-02 18:13:00,2025-01-02 23:41:00,E10,D1,San Francisco,Austin
    FLIGHT#0338,UA,1581,SFO,OGG,2025-01-02 18:15:00,2025-01-02 22:06:00,B40,E18,San Francisco,Kahului
    FLIGHT#0339,OO,5227,SFO,SAN,2025-01-02 18:26:00,2025-01-02 19:59:00,E33,E50,San Francisco,San Diego
    FLIGHT#0340,CY,941,LAX,SFO,2025-01-02 18:24:00,2025-01-02 19:39:00,D4,A22,Los Angeles,San Francisco
    FLIGHT#0341,AA,1459,ORD,SFO,2025-01-02 18:21:00,2025-01-02 21:11:00,D42,B25,Chicago,San Francisco
    FLIGHT#0342,OO,5442,SFO,RDD,2025-01-02 18:19:00,2025-01-02 19:35:00,E21,B9,San Francisco,Redding
    FLIGHT#0343,AA,69,MIA,SFO,2025-01-02 18:31:00,2025-01-02 21:33:00,B11,B15,Miami,San Francisco
    FLIGHT#0344,OO,6220,DFW,SFO,2025-01-02 19:01:00,2025-01-02 20:40:00,D35,E4,Dallas-Fort Worth,San Francisco
    FLIGHT#0345,UA,1670,SFO,HNL,2025-01-02 18:42:00,2025-01-02 22:52:00,A15,C18,San Francisco,Honolulu
    FLIGHT#0346,DL,435,JFK,SFO,2025-01-02 18:57:00,2025-01-02 22:25:00,D35,C33,New York,San Francisco
    FLIGHT#0347,UA,508,SEA,SFO,2025-01-02 19:01:00,2025-01-02 21:05:00,C16,B8,Seattle,San Francisco
    FLIGHT#0348,UA,1523,BOS,SFO,2025-01-02 21:19:00,2025-01-03 01:19:00,E7,B32,Boston,San Francisco
    FLIGHT#0349,CY,593,PSP,SFO,2025-01-02 19:03:00,2025-01-02 20:21:00,C13,A47,Palm Springs,San Francisco
    FLIGHT#0350,UA,741,ORD,SFO,2025-01-02 19:44:00,2025-01-02 22:14:00,A16,C32,Chicago,San Francisco
    FLIGHT#0351,WN,3414,SFO,SAN,2025-01-02 19:43:00,2025-01-02 21:10:00,E3,D46,San Francisco,San Diego
    FLIGHT#0352,UA,404,SFO,PDX,2025-01-02 19:42:00,2025-01-02 21:24:00,B48,A30,San Francisco,Portland
    FLIGHT#0353,UA,637,SFO,SNA,2025-01-02 19:32:00,2025-01-02 20:49:00,D40,A23,San Francisco,Santa Ana
    FLIGHT#0354,OO,5573,SAT,SFO,2025-01-02 21:13:00,2025-01-02 22:57:00,D34,E33,San Antonio,San Francisco
    FLIGHT#0355,AA,219,SFO,LAX,2025-01-02 20:03:00,2025-01-02 22:00:00,E27,D38,San Francisco,Los Angeles
    FLIGHT#0356,OO,5600,BUR,SFO,2025-01-02 19:55:00,2025-01-02 21:21:00,A7,A27,Burbank,San Francisco
    FLIGHT#0357,CY,947,LAX,SFO,2025-01-02 20:38:00,2025-01-02 22:06:00,D28,C15,Los Angeles,San Francisco
    FLIGHT#0358,WN,138,SFO,LAS,2025-01-02 20:26:00,2025-01-02 21:49:00,B35,E31,San Francisco,Las Vegas
    FLIGHT#0359,OO,5302,SFO,PSC,2025-01-02 20:29:00,2025-01-02 22:28:00,C9,A15,San Francisco,Pasco
    FLIGHT#0360,CY,748,SFO,SEA,2025-01-02 20:46:00,2025-01-02 23:17:00,D7,E25,San Francisco,Seattle
    FLIGHT#0361,UA,236,SFO,EWR,2025-01-02 20:41:00,2025-01-03 05:04:00,D12,B47,San Francisco,Newark
    FLIGHT#0362,OO,6503,SFO,EUG,2025-01-02 20:54:00,2025-01-02 22:27:00,A50,E49,San Francisco,Eugene
    FLIGHT#0363,WN,1174,LAS,SFO,2025-01-02 20:58:00,2025-01-02 22:19:00,C42,D33,Las Vegas,San Francisco
    FLIGHT#0364,AS,744,SFO,SLC,2025-01-02 20:52:00,2025-01-02 23:33:00,B11,A39,San Francisco,Salt Lake City
    FLIGHT#0365,WN,4992,SFO,PHX,2025-01-02 21:49:00,2025-01-03 00:32:00,D19,E15,San Francisco,Phoenix
    FLIGHT#0366,UA,469,EWR,SFO,2025-01-02 23:07:00,2025-01-03 02:27:00,E3,D19,Newark,San Francisco
    FLIGHT#0367,UA,1163,SFO,EWR,2025-01-02 21:44:00,2025-01-03 05:45:00,D19,C17,San Francisco,Newark
    FLIGHT#0368,DL,2337,SFO,ATL,2025-01-02 21:44:00,2025-01-03 05:23:00,B4,A39,San Francisco,Atlanta
    FLIGHT#0369,OO,6432,SFO,EUG,2025-01-02 22:24:00,2025-01-02 23:57:00,E11,A4,San Francisco,Eugene
    FLIGHT#0370,US,898,SFO,CLT,2025-01-02 22:24:00,2025-01-03 06:16:00,A45,A24,San Francisco,Charlotte
    FLIGHT#0371,UA,292,SFO,MCO,2025-01-02 22:30:00,2025-01-03 06:37:00,C7,C5,San Francisco,Orlando
    FLIGHT#0372,OO,5600,SFO,MFR,2025-01-02 22:36:00,2025-01-03 00:01:00,E42,E38,San Francisco,Medford
    FLIGHT#0373,UA,263,LAX,SFO,2025-01-02 22:48:00,2025-01-03 00:04:00,B22,E27,Los Angeles,San Francisco
    FLIGHT#0374,OO,5414,SFO,RDM,2025-01-02 22:32:00,2025-01-03 00:12:00,A46,C18,San Francisco,Redmond-Bend
    FLIGHT#0375,UA,1241,SFO,EWR,2025-01-02 23:22:00,2025-01-03 07:44:00,A28,E27,San Francisco,Newark
    FLIGHT#0376,UA,522,SFO,PDX,2025-01-02 22:55:00,2025-01-03 00:42:00,A10,E39,San Francisco,Portland
    FLIGHT#0377,UA,724,SFO,ORD,2025-01-02 23:05:00,2025-01-03 05:20:00,B40,D23,San Francisco,Chicago
    FLIGHT#0378,UA,156,SFO,MSY,2025-01-02 23:22:00,2025-01-03 05:24:00,C40,A9,San Francisco,New Orleans
    FLIGHT#0379,CY,358,SFO,BOS,2025-01-02 22:52:00,2025-01-03 07:31:00,B23,A44,San Francisco,Boston
    FLIGHT#0380,DL,1370,SFO,JFK,2025-01-02 23:04:00,2025-01-03 07:36:00,E10,A49,San Francisco,New York
    FLIGHT#0381,UA,1729,SFO,IAD,2025-01-02 23:10:00,2025-01-03 07:35:00,D32,E42,San Francisco,Washington
    FLIGHT#0382,CY,34,SFO,JFK,2025-01-02 23:15:00,2025-01-03 07:54:00,D28,E25,San Francisco,New York
    FLIGHT#0383,DL,1880,SFO,ATL,2025-01-02 00:53:00,2025-01-02 08:27:00,E2,A29,San Francisco,Atlanta
    FLIGHT#0384,UA,1523,SFO,EWR,2025-01-02 23:39:00,2025-01-03 07:43:00,B9,D15,San Francisco,Newark
    FLIGHT#0385,US,426,PHX,SFO,2025-01-02 00:18:00,2025-01-02 01:16:00,D47,C42,Phoenix,San Francisco
  4. flights.csv 파일의 데이터를 flights 테이블로 가져옵니다.

    cbt import flights flights.csv
  5. Bigtable Studio에서 다음 쿼리를 실행하여 테이블이 채워졌는지 확인합니다.

    • SELECT * FROM airports LIMIT 10;
    • SELECT * FROM flights LIMIT 10;

Bigtable Studio에서 컨텍스트 세트 만들기

이 섹션에서는 flights-assistant라는 컨텍스트 집합을 만듭니다. 이 컨텍스트 세트에는 업로드된 컨텍스트 세트 파일이 포함되어 있지 않습니다.

  1. Google Cloud 콘솔에서 Bigtable 페이지로 이동합니다.

    Bigtable로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 탐색 메뉴에서 Bigtable Studio를 클릭합니다.

  4. 탐색기 창에서 컨텍스트 세트 옆에 있는 작업 보기()를 클릭합니다.

  5. 컨텍스트 세트 만들기를 클릭합니다.

  6. 컨텍스트 세트 이름에 flights-assistant를 입력합니다.

  7. 만들기를 클릭합니다.

Studio에서 QueryData 테스트

이 섹션에서는 자연어 질문을 통해 설정된 flights-assistant 컨텍스트를 사용하여 SQL 쿼리를 생성합니다. 컨텍스트 세트에 업로드된 컨텍스트 세트 파일이 없고 Bigtable 스키마는 개별 column qualifier가 아닌 column family 이름(info)만 노출하므로 QueryData는 column qualifier를 추측하고 최적화되지 않은 쿼리를 생성합니다.

  1. 탐색기 창에서 컨텍스트 세트 옆에 있는 작업 보기()를 클릭합니다.
  2. 테스트 컨텍스트 세트를 클릭합니다.
  3. 쿼리 편집기에서 QueryData를 사용하여 SQL 생성: flights-assistant를 클릭합니다.
  4. 다음 자연어 질문을 입력하여 SQL 쿼리를 생성하고 생성을 클릭합니다.

    Find flights from SFO to JFK.
    

    SQL 쿼리를 검토합니다. 컨텍스트 집합이 없으면 QueryData는 flights 테이블에서 info column family(MAP<BYTES, BYTES>)를 보지만 column qualifier departure_airport 및 arrival_airport는 보지 않으므로 origin 및 destination와 같은 한정자 이름을 추측합니다.

      SELECT
        _key,
        info
      FROM
        flights
      WHERE
        CAST(info['origin'] AS STRING) = 'SFO'
        AND CAST(info['destination'] AS STRING) = 'JFK';
    
  5. QueryData를 사용하여 SQL 생성: flights-assistant 창에서 수정을 클릭합니다.

  6. 다음 자연어 질문을 입력하여 SQL 쿼리를 생성하고 업데이트를 클릭합니다.

    Tell me flights that can help me beat nighttime traffic if traveling from New York
    

    데이터베이스가 nighttime traffic 용어를 이해하지 못하고 다음 쿼리와 같이 flights 테이블에 존재하지 않는 column qualifier를 추측합니다.

    -- Assuming 'nighttime traffic' refers to flights departing during the night,
    -- defined here as between 8:00 PM (20:00) and 5:00 AM (05:00).
    SELECT
      CAST(_key AS STRING) AS flight_id,
      CAST(info['flight_number'] AS STRING) AS flight_number,
      CAST(info['origin'] AS STRING) AS origin,
      CAST(info['destination'] AS STRING) AS destination,
      CAST(info['departure_time'] AS STRING) AS departure_time
    FROM
      flights
    WHERE
      CAST(info['origin'] AS STRING) = 'New York'
      AND (
        EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 20
        OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 5
      );
    
  7. QueryData를 사용하여 SQL 생성: flights-assistant 창에서 수정을 클릭합니다.

  8. 다음 자연어 질문을 입력하여 SQL 쿼리를 생성하고 업데이트를 클릭합니다.

    Show me flights to Raleigh-Durham
    

    값 검색 컨텍스트가 없으면 QueryData는 column qualifier를 추측하고 Raleigh-Durham를 필터링합니다. flights 테이블은 도시를 info['arrival_city'] 아래에 Raleigh-durham로 저장하므로 쿼리는 행을 반환하지 않습니다.

    SELECT
      _key,
      info
    FROM
      flights
    WHERE
      CAST(info['destination_city'] AS STRING) = 'Raleigh-Durham';
    

컨텍스트 세트의 컨텍스트 생성

이 섹션에서는 환경을 준비하고 컨텍스트 세트의 쿼리 기능을 개선하는 데 도움이 되는 컨텍스트 파일을 만듭니다.

환경 설정

컨텍스트 생성을 시작하려면 먼저 환경을 준비해야 합니다.

환경을 설정하려면 다음 단계를 수행합니다.

  1. Antigravity CLI를 설치합니다. 자세한 내용은 Antigravity CLI 시작하기를 참고하세요.
  2. Google Cloud CLI를 설치합니다.
  3. 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다. 터미널에서 다음 명령어를 실행하여 인증하고 프로젝트를 선택합니다.

    gcloud auth application-default login
  4. 컨텍스트 엔지니어링 에이전트의 기본 요건인 Python 패키지 및 프로젝트 매니저인 uv를 설치합니다. 시스템에 아직 Python이 설치되어 있지 않으면 uv에서 설치할 수 있습니다.

  5. 컨텍스트 엔지니어링 에이전트 설치:

    agy plugin install https://github.com/GoogleCloudPlatform/db-context-enrichment/tree/main/plugin
  6. 터미널에서 Antigravity CLI를 시작합니다.

    agy
  7. MCP 도구 상자를 사용하여 컨텍스트 생성을 위한 데이터베이스 연결을 설정합니다. 연결은 tools.yaml 구성 파일에 정의됩니다.

    현재 디렉터리에 tools.yaml 구성 파일을 만들려면 다음과 같은 프롬프트를 입력합니다.

    Help me set up a database connection.
    

    스킬에서 제공하는 안내를 따릅니다. tools.yaml 파일에 대한 자세한 내용은 MCP 도구 상자 문서를 참조하세요.

  8. tools.yaml 파일이 생성된 후 구성을 새로고침하려면 Antigravity CLI에서 다음 명령어를 실행하고 안내에 따라 도구 상자 MCP 서버를 새로고침합니다.

    /mcp
    1. db-context-engineering_toolbox을 선택합니다.

    2. Restart을 선택합니다.

  9. MCP 도구 상자와 컨텍스트 엔지니어링 에이전트 플러그인이 연결되어 있고 사용할 준비가 되었는지 확인합니다.

    /mcp

템플릿 컨텍스트 생성

이 섹션에서는 QueryData가 flights column qualifier 또는 nighttime traffic 용어를 알지 못하는 이전 섹션의 문제를 해결하기 위해 자연어 질문을 info column family column qualifier에 매핑하는 컨텍스트 집합 파일에 템플릿을 정의하고 nighttime traffic를 오후 5시에서 오후 7시 사이에 발생하는 트래픽으로 정의합니다.

템플릿 컨텍스트를 생성하려면 다음 단계를 수행합니다.

  1. Antigravity CLI에 다음 프롬프트를 입력합니다.

    Generate templates for the following two questions and SQL queries:
    
    1. Question: "Show me flights from SFO to JFK"
    SQL:
    SELECT
      CAST(_key AS STRING) AS flight_id,
      CAST(info['airline'] AS STRING) AS airline,
      CAST(info['flight_number'] AS STRING) AS flight_number,
      CAST(info['departure_airport'] AS STRING) AS departure_airport,
      CAST(info['arrival_airport'] AS STRING) AS arrival_airport,
      CAST(info['departure_time'] AS STRING) AS departure_time,
      CAST(info['arrival_time'] AS STRING) AS arrival_time,
      CAST(info['departure_gate'] AS STRING) AS departure_gate,
      CAST(info['arrival_gate'] AS STRING) AS arrival_gate,
      CAST(info['departure_city'] AS STRING) AS departure_city,
      CAST(info['arrival_city'] AS STRING) AS arrival_city
    FROM
      flights
    WHERE
      CAST(info['departure_airport'] AS STRING) = 'SFO'
      AND CAST(info['arrival_airport'] AS STRING) = 'JFK'
    ORDER BY
      departure_time;
    
    2. Question: "Tell me flights that can help me beat nighttime traffic if traveling from New York"
    SQL:
    SELECT
      CAST(info['airline'] AS STRING) AS airline,
      CAST(info['flight_number'] AS STRING) AS flight_number,
      CAST(info['departure_airport'] AS STRING) AS departure_airport,
      CAST(info['departure_time'] AS STRING) AS departure_time
    FROM
      flights
    WHERE
      CAST(info['departure_city'] AS STRING) = 'New York'
      AND (
        EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 17
        OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 19
      )
    ORDER BY
      departure_time;
    
  2. 에이전트는 입력을 특정 형식으로 변환하여 다양한 사용자 쿼리에서 컨텍스트 세트의 성능을 미세 조정합니다. 자세한 내용은 컨텍스트 세트 개요를 참조하세요.

  3. 생성된 쿼리 템플릿을 검토합니다. 쿼리 템플릿을 새 에이전트 컨텍스트 파일로 저장하거나 기존 에이전트 컨텍스트 파일에 추가할 수 있습니다.

  4. 에이전트에 템플릿을 저장하라는 프롬프트를 입력합니다.

    Save it to context_set.json.
    

    에이전트는 동일한 디렉터리에 다음 콘텐츠로 파일을 만듭니다.

    {
      "templates": [
        {
          "nl_query": "Show me flights from SFO to JFK",
          "sql": "SELECT CAST(_key AS STRING) AS flight_id, CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['arrival_airport'] AS STRING) AS arrival_airport, CAST(info['departure_time'] AS STRING) AS departure_time, CAST(info['arrival_time'] AS STRING) AS arrival_time, CAST(info['departure_gate'] AS STRING) AS departure_gate, CAST(info['arrival_gate'] AS STRING) AS arrival_gate, CAST(info['departure_city'] AS STRING) AS departure_city, CAST(info['arrival_city'] AS STRING) AS arrival_city FROM flights WHERE CAST(info['departure_airport'] AS STRING) = 'SFO' AND CAST(info['arrival_airport'] AS STRING) = 'JFK' ORDER BY departure_time",
          "intent": "Find flights from SFO to JFK.",
          "manifest": "Find flights from a given departure airport code to a given arrival airport code.",
          "parameterized": {
            "parameterized_sql": "SELECT CAST(_key AS STRING) AS flight_id, CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['arrival_airport'] AS STRING) AS arrival_airport, CAST(info['departure_time'] AS STRING) AS departure_time, CAST(info['arrival_time'] AS STRING) AS arrival_time, CAST(info['departure_gate'] AS STRING) AS departure_gate, CAST(info['arrival_gate'] AS STRING) AS arrival_gate, CAST(info['departure_city'] AS STRING) AS departure_city, CAST(info['arrival_city'] AS STRING) AS arrival_city FROM flights WHERE CAST(info['departure_airport'] AS STRING) = ? AND CAST(info['arrival_airport'] AS STRING) = ? ORDER BY departure_time",
            "parameterized_intent": "Find flights from ? to ?."
          }
        },
        {
          "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York",
          "sql": "SELECT CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['departure_time'] AS STRING) AS departure_time FROM flights WHERE CAST(info['departure_city'] AS STRING) = 'New York' AND (EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 17 OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 19) ORDER BY departure_time",
          "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York",
          "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city",
          "parameterized": {
            "parameterized_sql": "SELECT CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['departure_time'] AS STRING) AS departure_time FROM flights WHERE CAST(info['departure_city'] AS STRING) = ? AND (EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 17 OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 19) ORDER BY departure_time",
            "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from ?"
          }
        }
      ]
    }
    

값 검색 컨텍스트 생성

이 섹션에서는 대소문자를 구분하지 않는 정확한 문자열 일치를 사용하여 컨텍스트 세트 로직이 값 구문을 Bigtable 열에 저장된 특정 값에 매핑하는 데 도움이 되는 값 검색 컨텍스트를 생성합니다. 예를 들어 사용자가 'Raleigh-Durham'행 항공편을 요청하면 값 검색은 이를 저장된 데이터베이스 값 "Raleigh-durham"(공항 코드 RDU)에 매핑합니다.

값 검색 컨텍스트를 생성하려면 다음 단계를 수행합니다.

  1. 에이전트 하네스에 다음 프롬프트를 입력합니다.

    Generate a case-insensitive value search on table "airports" for column "info['city']" with concept "Airport City" using match function "EXACT_MATCH_STRINGS".
  2. 생성된 값 검색 정의를 검토합니다. 값 검색 정의를 새 컨텍스트 세트 파일로 저장하거나 기존 컨텍스트 세트 파일에 추가할 수 있습니다.

  3. Append the context to context_set.json를 사용하여 에이전트에 프롬프트를 입력합니다. 이렇게 하면 이전 섹션에서 만든 컨텍스트 파일에 값 검색 정의가 추가됩니다.

  4. 컨텍스트 세트 파일이 생성된 데이터베이스 인스턴스와 데이터베이스 이름을 입력합니다.

    기존 컨텍스트 파일이 값 검색 정의로 업데이트되며, 콘텐츠는 다음과 같습니다.

    {
      "templates": [
        {
          "nl_query": "Show me flights from SFO to JFK",
          "sql": "SELECT CAST(_key AS STRING) AS flight_id, CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['arrival_airport'] AS STRING) AS arrival_airport, CAST(info['departure_time'] AS STRING) AS departure_time, CAST(info['arrival_time'] AS STRING) AS arrival_time, CAST(info['departure_gate'] AS STRING) AS departure_gate, CAST(info['arrival_gate'] AS STRING) AS arrival_gate, CAST(info['departure_city'] AS STRING) AS departure_city, CAST(info['arrival_city'] AS STRING) AS arrival_city FROM flights WHERE CAST(info['departure_airport'] AS STRING) = 'SFO' AND CAST(info['arrival_airport'] AS STRING) = 'JFK' ORDER BY departure_time",
          "intent": "Find flights from SFO to JFK.",
          "manifest": "Find flights from a given departure airport code to a given arrival airport code.",
          "parameterized": {
            "parameterized_sql": "SELECT CAST(_key AS STRING) AS flight_id, CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['arrival_airport'] AS STRING) AS arrival_airport, CAST(info['departure_time'] AS STRING) AS departure_time, CAST(info['arrival_time'] AS STRING) AS arrival_time, CAST(info['departure_gate'] AS STRING) AS departure_gate, CAST(info['arrival_gate'] AS STRING) AS arrival_gate, CAST(info['departure_city'] AS STRING) AS departure_city, CAST(info['arrival_city'] AS STRING) AS arrival_city FROM flights WHERE CAST(info['departure_airport'] AS STRING) = ? AND CAST(info['arrival_airport'] AS STRING) = ? ORDER BY departure_time",
            "parameterized_intent": "Find flights from ? to ?."
          }
        },
        {
          "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York",
          "sql": "SELECT CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['departure_time'] AS STRING) AS departure_time FROM flights WHERE CAST(info['departure_city'] AS STRING) = 'New York' AND (EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 17 OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 19) ORDER BY departure_time",
          "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York",
          "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city",
          "parameterized": {
            "parameterized_sql": "SELECT CAST(info['airline'] AS STRING) AS airline, CAST(info['flight_number'] AS STRING) AS flight_number, CAST(info['departure_airport'] AS STRING) AS departure_airport, CAST(info['departure_time'] AS STRING) AS departure_time FROM flights WHERE CAST(info['departure_city'] AS STRING) = ? AND (EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 17 OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 19) ORDER BY departure_time",
            "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from ?"
          }
        }
      ],
      "facets": [],
      "value_searches": [
        {
          "query": "SELECT CAST(T.info['city'] AS STRING) AS value, 'info:city' AS `columns`, 'Airport City' AS concept_type, 0.0 AS distance, CONCAT('iata=', CAST(T.info['iata'] AS STRING), ', name=', CAST(T.info['name'] AS STRING)) AS context FROM `airports` AS T WHERE LOWER(CAST(T.info['city'] AS STRING)) = LOWER(CAST($value AS STRING))",
          "concept_type": "Airport City",
          "description": "Exact case-insensitive match on airport city name in the airports table."
        }
      ]
    }
    

QueryData에 컨텍스트 세트 파일 업로드

이 섹션에서는 컨텍스트 세트 파일을 QueryData에 업로드하여 데이터베이스에서 QueryData의 SQL 생성 기능을 개선합니다.

컨텍스트를 업로드하려면 다음 단계를 수행합니다.

  1. Google Cloud 콘솔에서 Bigtable 페이지로 이동합니다.

    Bigtable로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 탐색 메뉴에서 Bigtable Studio를 클릭합니다.

  4. 탐색기 창의 컨텍스트 세트에서 flights-assistant 컨텍스트 세트 옆에 있는 작업 보기() 아이콘을 클릭합니다.

  5. 컨텍스트 세트 수정을 클릭합니다.

  6. 컨텍스트 파일 업로드 섹션에서 찾아보기를 클릭한 다음 이전에 생성한 컨텍스트 세트 파일을 선택합니다.

  7. 저장을 클릭합니다.

QueryData를 사용하여 SQL 쿼리 생성

이 섹션에서는 업로드한 컨텍스트 세트 파일을 사용하여 자연어 질문을 합니다. 이를 통해 QueryData가 nighttime traffic와 같은 용어 및 기타 관련 문구의 정의를 올바르게 이해하고 적용하는지 확인할 수 있습니다.

SQL 쿼리를 생성하려면 다음 단계를 수행합니다.

  1. 탐색기 창에서 컨텍스트 세트 옆에 있는 작업 보기()를 클릭합니다.
  2. 테스트 컨텍스트 세트를 클릭합니다.
  3. 쿼리 편집기에서 QueryData를 사용하여 SQL 생성: flights-assistant를 클릭합니다.
  4. SQL 쿼리를 생성하려면 다음 자연어 질문을 입력한 후 생성을 클릭합니다.

    Tell me flights that can help me beat nighttime traffic if traveling from New York
    

    생성된 SQL 쿼리는 다음과 비슷합니다.

    SELECT
      CAST(info['airline'] AS STRING) AS airline,
      CAST(info['flight_number'] AS STRING) AS flight_number,
      CAST(info['departure_airport'] AS STRING) AS departure_airport,
      CAST(info['departure_time'] AS STRING) AS departure_time
    FROM
      flights
    WHERE
      CAST(info['departure_city'] AS STRING) = 'New York'
      AND (
        EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 17
        OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 19
      )
    ORDER BY
      departure_time;
    

    이는 QueryData의 컨텍스트에 추가한 것과 동일한 질문입니다. 이제 QueryData가 nighttime traffic라는 용어를 정확하게 해석할 수 있습니다.

    컨텍스트는 특정 질문에서 비롯되지만 QueryData는 이를 사용하여 광범위한 유사한 질문에 대한 SQL 생성을 개선합니다.

  5. QueryData를 사용하여 SQL 생성: flights-assistant 창에서 수정을 클릭합니다.

  6. 다음과 유사한 질문을 입력하여 SQL 쿼리를 생성하고 업데이트를 클릭합니다.

    What are the flights that can help me avoid evening traffic if departing from Boston
    

    질문에서 nighttime traffic이라는 용어를 유사한 용어인 evening traffic로 대체하므로 QueryData는 동일한 해석을 적용하여 이 질문에 일관된 답변을 제공합니다.

    생성된 SQL 쿼리는 다음과 비슷합니다.

    SELECT
      CAST(info['airline'] AS STRING) AS airline,
      CAST(info['flight_number'] AS STRING) AS flight_number,
      CAST(info['departure_airport'] AS STRING) AS departure_airport,
      CAST(info['departure_time'] AS STRING) AS departure_time
    FROM
      flights
    WHERE
      CAST(info['departure_city'] AS STRING) = 'Boston'
      AND (
        EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) < 17
        OR EXTRACT(HOUR FROM TIMESTAMP(CAST(info['departure_time'] AS STRING))) >= 19
      )
    ORDER BY
      departure_time;
    
  7. QueryData를 사용하여 SQL 생성: flights-assistant 창에서 수정을 클릭합니다.

  8. 다음 질문을 입력하여 SQL 쿼리를 생성한 다음 업데이트를 클릭합니다.

    Show me flights to Raleigh-Durham
    

    생성된 SQL 쿼리는 다음과 비슷합니다.

    SELECT
      CAST(_key AS STRING) AS flight_id,
      CAST(info['airline'] AS STRING) AS airline,
      CAST(info['flight_number'] AS STRING) AS flight_number,
      CAST(info['departure_airport'] AS STRING) AS departure_airport,
      CAST(info['arrival_airport'] AS STRING) AS arrival_airport,
      CAST(info['departure_time'] AS STRING) AS departure_time,
      CAST(info['arrival_time'] AS STRING) AS arrival_time,
      CAST(info['departure_gate'] AS STRING) AS departure_gate,
      CAST(info['arrival_gate'] AS STRING) AS arrival_gate,
      CAST(info['departure_city'] AS STRING) AS departure_city,
      CAST(info['arrival_city'] AS STRING) AS arrival_city
    FROM
      flights
    WHERE
      CAST(info['arrival_city'] AS STRING) = 'Raleigh-durham'
    ORDER BY
      departure_time;
    

    이제 QueryData가 Raleigh-Durham를 저장된 값 "Raleigh-durham"(RDU)에 정확하게 매핑할 수 있습니다.

애플리케이션과 QueryData 통합

이 섹션에서는 항공편 검색 애플리케이션의 데이터 에이전트를 만듭니다. 이 데이터 에이전트는 이전에 만든 flights 및 airports 테이블에 대한 대화형 인터페이스를 제공합니다. 또한 에이전트 개발 키트(ADK), Gemini 데이터 분석 QueryData MCP 도구, 컨텍스트 세트를 사용하여 이 데이터 에이전트를 만들고 애플리케이션에 통합하여 응답 품질을 개선하는 방법도 설명합니다.

  1. MCP 도구 상자 버전 1.14.0 이상을 다운로드합니다. MCP 도구 상자는 애플리케이션이 연결할 수 있는 도구로 데이터 에이전트를 노출합니다. MCP 도구 상자는 이전에 설치한 컨텍스트 엔지니어링 에이전트와 다르며, 컨텍스트를 생성합니다.

  2. 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다.

    gcloud auth application-default login
  3. 앞에서 만든 컨텍스트 세트의 ID를 찾습니다. 컨텍스트 세트 ID를 찾는 방법에 대한 자세한 내용은 컨텍스트 세트 ID 찾기를 참조하세요.

  4. MCP 도구 상자를 사용하여 데이터 에이전트에 연결하려면 tools.yaml 구성에 다음을 추가합니다. 자세한 내용은 Gemini 데이터 분석 소스 및 Gemini 데이터 분석 QueryData 도구를 참조하세요.

    ---
    kind: source
    name: gda-api-source
    type: cloud-gemini-data-analytics
    projectId: "PROJECT_ID"
    ---
    kind: tool
    name: cloud_gda_query_tool
    type: cloud-gemini-data-analytics-query
    source: gda-api-source
    description: Use this tool to send natural language queries to the Gemini Data Analytics API and receive SQL, natural language answers, and explanations.
    location: "REGION_ID"
    context:
      datasourceReferences:
        bigtableReference:
          databaseReference:
            projectId: "PROJECT_ID"
            instanceId: "INSTANCE_ID"
          agentContextReference:
            contextSetId: "CONTEXT_SET_ID"
    generationOptions:
      generateQueryResult: true
      generateNaturalLanguageAnswer: true
      generateExplanation: true
      generateDisambiguationQuestion: true
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • REGION_ID: Bigtable 클러스터의 리전(예: us-central1)입니다.
    • INSTANCE_ID: Bigtable 인스턴스의 ID입니다.
    • CONTEXT_SET_ID: 컨텍스트 세트 ID입니다. 컨텍스트 세트 ID를 찾는 방법에 대한 자세한 내용은 컨텍스트 세트 ID 찾기를 참조하세요.
  5. tools.yaml 파일을 사용하여 MCP 도구 상자 서버를 실행합니다.

    ./toolbox --config PATH_TO_TOOLS_YAML

    PATH_TO_TOOLS_YAML을 이전에 만든 tools.yaml 파일의 경로로 바꿉니다.

  6. MCP 도구 상자의 Python SDK를 사용하여 Gemini 데이터 분석 QueryData 도구를 호출하는 ADK 애플리케이션을 만듭니다. MCP Toolbox의 Python SDK를 사용하는 방법에 대한 자세한 내용은 Toolbox 빠른 시작을, Python ADK의 경우 ADK 빠른 시작을 참조하세요.

    1. 애플리케이션을 저장할 디렉터리(예: flight-assistant-app)를 만듭니다.
    2. 디렉터리를 flight-assistant-app 디렉터리로 변경합니다.

      mkdir flight-assistant-app
      cd flight-assistant-app
    3. flight-assistant-app 디렉터리에서 다음 명령어를 실행하여 가상 환경을 만들고 필요한 구성요소를 설치합니다.

      uv init
      uv add google-adk toolbox-core google-genai
    4. ADK 에이전트를 설정합니다.

      1. ADK 에이전트를 만듭니다.

        uv run adk create my_agent
      2. gemini-2.5-flash 모델 이상을 선택합니다.

      3. Google AI를 선택하고 Gemini API 키를 입력합니다. API 키를 찾는 방법에 관한 자세한 내용은 Gemini API 키 사용을 참고하세요. (또는 무료 체험이 필요하지 않은 경우 Vertex AI를 선택하고 결제가 사용 설정된 Google Cloud 프로젝트를 지정할 수 있습니다.)

    5. agent.py 파일의 콘텐츠를 다음 Flight Data Assistant 샘플 애플리케이션 코드로 바꿉니다.

      from typing import cast
      
      from google.adk.agents.llm_agent import Agent
      from google.adk.agents.llm_agent import ToolUnion
      
      from toolbox_core import ToolboxSyncClient
      
      TOOLBOX_URL = "http://127.0.0.1:5000"
      
      INSTRUCTION = """
      # ROLE
      You are a friendly and factual flight data assistant. Your goal is to help users find the best flights for their needs by providing accurate information with a helpful, professional tone.
      - use the Query Data Tool to answer the user's question, if the tool fails to generate a valid query, ask the user to clarify their question.
      
      # OPERATIONAL CONSTRAINTS
      - TOOL LIMITATION: You only have access to the Query Data Tool. Do not claim to have capabilities beyond what this tool provides.
      - TRANSPARENCY POLICY: Maintain a seamless user experience. Never mention that you are using a tool, querying a database, or generating SQL. Frame all responses as your own direct assistance.
      - SCOPE MANAGEMENT: If a user asks for something beyond your capabilities, politely state that you cannot perform that specific task. Guide the user towards what you can help with.
      
      # COMMUNICATION STYLE
      - Be concise and scannable when listing answers.
      - Maintain a helpful, professional persona.
      
      =====
      
      # QUERY DATA TOOL
      
      Inputs:
      1. query: A natural language formulation of a database query.
      
      Outputs: (all optional)
      1. disambiguation_question: Clarification questions or comments where the tool needs the users' input.
      2. generated_query: The generated query for the user query.
      3. intent_explanation: An explanation for why the tool produced `generated_query`.
      4. query_result: The result of executing `generated_query`.
      5. natural_language_answer: The natural language answer that summarizes the `query` and `query_result`.
      
      Usage guidance:
      1. If `disambiguation_question` is produced, then solicit the needed inputs from the user and try the tool with a new `query` that has the needed clarification.
      2. If `natural_language_answer` is produced, use `intent_explanation` and `generated_query` to see if you need to clarify any assumptions for the user.
      3. If the tool output indicates failure or empty results, explain that clearly using the provided reasoning.
      """
      
      client = ToolboxSyncClient(TOOLBOX_URL)
      
      mcp_tool = client.load_tool("cloud_gda_query_tool")
      
      root_agent = Agent(
          model="gemini-2.5-flash",  # Or newer.
          name="root_agent",
          instruction=INSTRUCTION,
          tools=cast(list[ToolUnion], [mcp_tool]),
      )
      
  7. 애플리케이션을 시작하려면 flight-assistant-app 디렉터리에서 다음 명령어를 실행합니다. http://127.0.0.1:8000에서 ADK 웹 서버에 액세스합니다.

    uv run adk web --port 8000
  8. hello과 같은 텍스트를 입력하여 에이전트와 상호작용을 시작합니다.

    ADK 에이전트가 일반적인 질문에 답변하고 필요한 MCP 도구를 호출합니다.

  9. 다음과 같은 항공편 관련 질문을 입력합니다.

    How many flights depart from the west side?
    

    이 질문에 답하기 위해 MCP 도구가 호출됩니다. 데이터베이스에서 the west side를 정의하지 않으므로 QueryData는 서부 해안 공항 목록을 가정하고 항공편 수와 설명을 반환합니다. 에이전트는 이를 사용하여 응답에서 가정을 명확히 합니다.

    There are 253 flights departing from the west side.
    
    Please note that "the west side" is not explicitly defined in our records, so this count assumes flights departing from major West Coast airports: Los Angeles (LAX), San Francisco (SFO), San Diego (SAN), Seattle (SEA), Portland (PDX), Las Vegas (LAS), and Phoenix (PHX). If you had a different set of airports in mind, please let me know!
    

  10. 에이전트에 대해 생성된 쿼리 템플릿과 유사한 질문을 입력합니다.

    Help me find flights from San Francisco that avoid the evening rush hour.
    

    앞서 추가한 QueryData 컨텍스트를 기반으로 MCP 도구는 evening traffic가 오후 5시에서 오후 7시 사이에 발생한다는 것을 이해합니다. MCP 도구는 에이전트가 대답을 구성하는 데 사용할 수 있도록 관련 데이터를 반환합니다.

    Here are the flights departing from San Francisco that avoid the evening rush hour (defined as 5 PM to 7 PM):
    
    * UA 1532 departing at 05:50:00
    * UA 1158 departing at 05:57:00
    * CY 922 departing at 06:38:00
    * OO 5441 departing at 07:08:00
    * UA 616 departing at 07:14:00
    * AA 24 departing at 07:14:00
    * B6 434 departing at 08:00:00
    * AA 242 departing at 08:18:00
    * UA 1739 departing at 08:22:00
    * OO 6336 departing at 08:32:00
    * US 1784 departing at 08:47:00
    * DL 1631 departing at 09:00:00
    * DL 1106 departing at 09:06:00
    * OO 5427 departing at 09:06:00
    * CY 352 departing at 09:25:00
    
  11. QueryData 에이전트 컨텍스트에 추가한 개념 유형을 기반으로 질문을 입력합니다.

    Show me flights to Raleigh-Durham
    

    이전에 추가된 값 검색 컨텍스트를 기반으로 에이전트는 'Raleigh-Durham'이 저장된 도시 "Raleigh-durham"(공항 코드 RDU)와 일치함을 이해하고 에이전트가 응답을 구성하는 데 사용할 수 있도록 관련 데이터를 반환합니다.

    Here is the flight heading to Raleigh-Durham (RDU):
    
    * Flight UA 1568 departs from San Francisco (SFO) at Gate A30 on 2025-01-02 at 14:55:00 and arrives at Raleigh-Durham (RDU) at Gate A26 on 2025-01-02 at 23:03:00.
    

에이전트 성능 반복

ADK 웹 UI를 사용하면 Gemini 데이터 분석 QueryData MCP 도구의 요청과 대답을 검사할 수 있습니다. 이 응답을 사용하여 생성된 SQL 쿼리, 결과 집합, 인텐트 설명, 모호성 해소 질문, 자연어 답변과 같은 도구 응답을 관찰하여 에이전트 응답의 정확성을 확인할 수 있습니다.

예를 들어 이전에 입력한 입력 텍스트 How many flights depart from the west side?의 경우 에이전트 풍선을 클릭합니다. 왼쪽 탐색 메뉴의 이벤트 탭에서 functionResponse를 펼쳐 다음 응답을 확인합니다.

{"result": "{"generatedQuery":"SELECT COUNT(*) AS flight_count FROM flights WHERE CAST(info['departure_airport'] AS STRING) IN ('LAX', 'SFO', 'SAN', 'SEA', 'PDX', 'LAS', 'PHX')","intentExplanation":"The user is asking for the number of flights departing from the 'west side'. Since there is no explicit definition or column for 'west side' in the schema, I will assume this refers to major airports on the West Coast of the United States (e.g., LAX, SFO, SAN, SEA, PDX, LAS, PHX).","queryResult":{"columns":[{"name":"flight_count"}],"rows":[{"values":[{"value":"253"}]}],"totalRowCount":"1"},"naturalLanguageAnswer":"There are 253 flights departing from West Coast airports (LAX, SFO, SAN, SEA, PDX, LAS, PHX)."}"}

대답 정확도 미세 조정

추가 컨텍스트를 추가하여 Gemini 데이터 분석 QueryData 도구의 대답 정확성을 지속적으로 미세 조정할 수 있습니다. 컨텍스트 엔지니어링 에이전트를 사용하여 컨텍스트를 생성한 다음 업데이트된 컨텍스트 세트 파일을 기존 flights-assistant 데이터 에이전트에 업로드합니다. 자세한 내용은 Bigtable Studio에서 컨텍스트 세트 관리를 참조하세요. 콘솔은 업로드 후 즉시 새 컨텍스트를 수집하므로 애플리케이션 다운타임 없이 에이전트의 정확성을 높일 수 있습니다.

여러 에이전트

개발 환경에서는 tools.yaml 파일의 도구에 고유한 이름을 할당하여 여러 데이터 에이전트 컨텍스트에서 A/B 테스트를 수행할 수 있습니다. 예를 들어 이름이 다른 두 개의 cloud-gemini-data-analytics-query 도구(예: cloud_gda_query_tool_v1 및 cloud_gda_query_tool_v2)를 정의하여 고유한 tools.yaml 구성을 만들 수 있습니다. 이 설정을 사용하면 해당 도구 이름을 선택하여 필요한 컨텍스트 버전을 프로그래매틱 방식으로 선택하는 애플리케이션 로직을 구현할 수 있습니다.

다음 예시 tools.yaml에서는 데이터베이스 소스에 여러 데이터 에이전트를 설정하는 방법을 보여줍니다.

kind: source
name: gda-api-source
type: cloud-gemini-data-analytics
projectId: PROJECT_ID
---
kind: tool
name: cloud_gda_query_tool_v1
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
  datasourceReferences:
    DB_SOURCE:
      databaseReference: ...
      agentContextReference:
        contextSetId: "V1_YOUR_CONTEXT_SET_ID"
generationOptions: ...
---
kind: tool
name: cloud_gda_query_tool_v2
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
  datasourceReferences:
    DB_SOURCE:
      databaseReference: ...
      agentContextReference:
        contextSetId: "V2_YOUR_CONTEXT_SET_ID"
generationOptions: ...

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • V1_YOUR_CONTEXT_SET_ID: 버전 1의 컨텍스트 세트 ID입니다.
  • V2_YOUR_CONTEXT_SET_ID: 버전 2의 컨텍스트 세트 ID입니다.
  • DB_SOURCE: 데이터베이스 소스 구성입니다.

삭제

이 튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 비용이 계속 청구되지 않도록 할 수 있습니다. 다음 섹션에서는 이러한 리소스를 삭제하는 방법을 설명합니다.

컨텍스트 세트 삭제

인스턴스를 삭제하기 전에 만든 컨텍스트 세트를 삭제합니다.

  1. Google Cloud 콘솔에서 Bigtable 페이지로 이동합니다.

    Bigtable로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 탐색 메뉴에서 Bigtable Studio를 클릭합니다.

  4. 탐색기 창에서 컨텍스트 세트 옆에 있는 작업 보기()를 클릭합니다.

  5. 컨텍스트 세트 삭제를 클릭합니다.

  6. 컨텍스트 세트 삭제 창에 flights-assistant를 입력합니다.

  7. 확인을 클릭합니다.

인스턴스 삭제

시작하기 전에 섹션에서 만든 인스턴스를 삭제하면 만든 모든 객체도 삭제됩니다.

  1. Google Cloud 콘솔에서 Bigtable 페이지로 이동합니다.

    Bigtable로 이동

  2. Test Instance와 같이 삭제하려는 인스턴스의 이름을 클릭합니다.

  3. 인스턴스 삭제를 클릭합니다.

  4. 인스턴스 ID를 입력하고 삭제를 클릭하여 인스턴스 삭제를 확인합니다.

다음 단계