구글 PS1팀 김소원
1. 개요
BigQuery의 내장된 BQML(BigQuery Machine Learning) 및 분석 기능을 통해 SQL 쿼리를 사용하여 코드 없이 predictions을 생성할 수 있습니다.
2. BigQuery ML을 사용한 이미지 데이터 분류

2-1. 데이터 세트 및 BigLake 연결 생성
- DataSet 생성

- BigLake 연결
BigLake 연결을 사용하면 BigQuery 액세스 제어 및 보안을 유지하며 외부 데이터 소스를 연결할 수 있습니다. 이 연결을 통해 Cloud Storage에서 개체를 읽습니다.
BigQuery Explorer 창에서 ADD DATA를 클릭합니다.

External Data Sources에 대한 연결을 클릭하고 BigLake 및 Remote functions option을 선택합니다.

2-2. Cloud Storage Bucket 생성 및 권한 부여
Cloud Storage Bucket 을 사용하여 생성하려는 모델의 이미지 파일들을 업로드 합니다.
- Bucket 생성
생성한 DataSet 및 Connection과 동일한 리전에 생성합니다.

- Bucket 생성 후 이미지를 업로드 하고, Connection 서비스 계정에 필요한 권한을 부여하여 이미지에 접근합니다.
ex)
. export sa=”yourServiceAccountId@email.address”
. gsutil iam ch serviceAccount:$sa:objectViewer “gs://<<bucket>>“
2-3. External Object Table 생성
Bucket 데이터에 액세스 하기 위해 BigQuery에서 외부 개체 테이블을 만듭니다.

아래와 같이 비정형 이미지를 정형 데이터처럼 생성하고 조작할 수 있습니다.

2-4. 모델 생성 및 Cloud Storage에 업로드
이 예시는 ResNet 50 모델을 사용하여, 생성한 Object 테이블에서 추론을 실행합니다.
- 이미지가 있는 Storage 위치에 모델을 업로드 합니다.(모델 다운로드 url은 출처 3번입니다)

2-5. 모델을 BQML에 로드후 추론
생성한 External Table과 동일한 BigQuery Dataset에 모델을 로드하고 Cloud Storage에 저장한 이미지를 적용합니다.
- Model 생성 SQL 실행
실행이 완료되면 다음과 같이 Explorer 에서 확인 가능합니다.

- 모델은 다음과 같습니다. (Labels에서 출력 필드를 나타내는 “activation_49” 필드를 확인할 수 있으며, Features에서 모델에 입력될 필드를 나타내는 “input_1” 필드를 확인 할 수 있습니다.)

- 추론생성한 BQML 모델을 사용하여 추론을 수행하기 위해 BigQuery에서 해당 테스트 이미지(ex)’gs://yoga_images/Downdog/00000097.jpg’) 선택하여 쿼리를 실행하며 실행 결과는 다음과 같습니다.
