ablog

不器用で落着きのない技術者のメモ

2023-01-01から1年間の記事一覧

Amazon Linux 2023 に JDK 11 をインストールする

AWS

手順 Amazon Linux のリリースとカーネルバージョンの確認 $ uname -a Linux ip-172-17-1-142.ap-northeast-1.compute.internal 6.1.34-58.102.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jun 27 21:38:12 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux $ cat …

Amazon Keyspaces を使ってみる

AWS

Maven でビルドしたアプリから DataStax の Cassandra ドライバーを使って Amazon Keyspaces に CQL を投げてみた。 手順 サーバーサイド(KeySpaces) テーブルを作成する マネコンから Amazon Keyspaces のトップページから [Getting started] をクリック…

Amazon Redshift の SYS_QUERY_HISTORY の planning_time と compile_time は execution_time に含まれるぽい

検証結果 planning_time と compile_time は execution_time に含まれるぽい。 検証手順 とあるコンパイルに時間がかかるクエリを実行する。 SYS_QUERY_HISTORY を確認する。 execution_time、compile_time、planning_time を足すと elapsed_time を超えてし…

Amazon Redshift の SYS_QUERY_HISTORY の elapsed_time は queue_time を含む

検証結果 queue_time は elapsed_time に含まれる 検証手順 手動WLMで Default queue の同時実行数を 1 に設定する。 Cloud-DWB-Derived-from-TPCH の 3TB のデータをロードする。 Cloud-DWB-Derived-from-TPCH の 3TB 用のクエリをシリアル実行する。 $ noh…

Amazon Redshift の SYS_QUERY_HISTORY の elapsed_time は lock_wait_time を含む

検証結果 elapsed_time = end_time - start_time lock_wait_time は elapsed_time に含まれる 検証手順 テーブルを作成して、行を挿入 CREATE TABLE testtab1(id int primary key, name varchar(32)); INSERT INTO testtab1 (id, name) VALUES(1, 'foo'); IN…

Glue PySpark で Parquet ファイルの型を変換する

import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job args = getResolvedOptions(sys.argv, ["JOB…

Glue カタログでテーブルのカラムを追加・削除すると、Redshift Spectrum でも追加・削除される

Glue カタログでテーブルのカラムを追加・削除すると、Redshift Spectrum でも追加・削除されるという当たり前のことを検証してみたメモ。 カラム追加・削除 Redshift から Glue カタログを参照するため external schema を作成する。 create external schem…

Redshift Spectrum から Glue カタログのVARCHARにクエリすると "Invalid column type" エラーが発生する

Glue カタログの VACHAR 型はサイズパラメータ( VARCHAR (256) など)がないが、Redshift Spectrum からサイズパラメータなしで定義された VARCHAR 列をクエリすると、"Invalid column type" エラーが発生する。 Redshift Spectrum を使用して、AWS Glue デ…

Parquet のタイプ(型)について

Type ファイルのプリミティヴな型は最小限の種類に絞られている。 Types The types supported by the file format are intended to be as minimal as possible, with a focus on how the types effect on disk storage. For example, 16-bit ints are not ex…

parquet-cli で Parquet ファイルを読む

parquet-tools は deprecated になっているらしく、parquet-cli をインストールして Parquet ファイルを読んでみた。 あと関連記事を調べると parquet-tools も紹介されていたりするけど,現時点では使えなくなっている $ brew install parquet-tools Error:…

Parquet はファイルでカラムの型を持っているため、Glue カタログだけ変更しても型を変えることはできない

S3 にある Parquet ファイルを Glue の Crawler でクロールしてテーブルを作成し、文字列型のカラムを数値型に変更するとエラーになるという当たりまり前(Parquet は項目定義に型を持っているバイナリファイルのため)のことを検証した。型を変えたい場合は…

Spark on EMR から Glue カタログにアクセスできない

事象 Spark on EMR で Glue カタログのデータベース名を表示しようとすると、"because no identity-based policy allows the glue:GetDatabase action" で AccessDeniedException が発生する。 $ pyspark >>> from pyspark.sql import SparkSession >>> spar…

Spark で "Possibly unquoted identifier ... detected. Please consider quoting it with back-quotes as" と怒られる

事象 Spark SQL で Glue カタログのデータベース名("_"や"-"を含む)を指定すると、"Possibly unquoted identifier ... detected. Please consider quoting it with back-quotes as" と怒られる。 $ pyspark >>> from pyspark.sql import SparkSession >>> …

クロスアカウントの s3 cp で "An error occurred (AccessDenied) when calling the GetObjectTagging operation: Access Denied"

AWS

事象 AWS CLI v2 でクロスアカウントでaws s3 cp を実行すると "An error occurred (AccessDenied) when calling the GetObjectTagging operation" で失敗する。 AWS CLI は v2 % aws --version aws-cli/2.5.8 Python/3.9.11 Darwin/21.6.0 exe/x86_64 promp…

AWS

* AWS Open Data の New York City Taxi のデータを自アカウントの S3 バケットにコピーする。 S3 バケット作成 $ aws s3 mb s3://nyc-tlc-az/ --region us-east-1 ファイルコピー $ aws s3 cp --recursive "s3://nyc-tlc/trip data/" "s3://nyc-tlc-az/trip…

Amazon Redshift でテーブルの列のデフォルト値を指定する

AWS

Amazon Redshift で列のデフォルト値を指定する。 dev awsuser 20230517_17:43:39 =# create table test_default_col( name varchar(10), updated timestamp DEFAULT sysdate ); CREATE TABLE Time: 632.178 ms dev awsuser 20230517_17:43:55 =# insert int…

Amazon Aurora の手動スナップショットの課金について

まとめ TotalBackupStorageBilled(保持期限内の自動スナップショットの累積サイズ) + SnapshotStorageUsed(保持期限外の手動スナップショット) がクラスターのストレージ使用量(VolumeBytesUsed)を超える分が課金される。 例えば 現在のストレージ使用…

Amazon Redshift RA3 の手動スナップショットのコストについて

AWS

Amazon Redshift RA3 の手動スナップショットの料金について 自動スナップショットは、 無料、最大35日間保持できる。 デフォルトで8時間ごとか、1ノードあたり 5GB 変更されると自動でスナップショットが作成される。 自動、手動ともに前回からの増分のみス…

Aurora の IO サイズ

AWS

Read は MySQL が 16KB、PostgreSQL が 8KB、Write は MySQL、PostgreSQL とも 4KB。 Each database page is 16 KB in Aurora MySQL-Compatible Edition and 8 KB in Aurora PostgreSQL-Compatible Edition.Aurora was designed to eliminate unnecessary I/…

Amazon Redshift でクエリテキストから SVL_QUERY_METRICS_SUMMARY を取得する

AWS

SQL elect b.database, substring(b.querytxt,1,30) sql, a.* from svl_query_metrics_summary a, stl_query b where a. query = b.query and b.querytxt like '%/* TPC-H Q%' order by substring(b.querytxt,1,30); 結果 database | sql | userid | query |…

Amazon Redshift でゾーンマップがあってもソートキーが必要な理由

AWS

Amazon Redshift はゾーンマップで 1MB ブロックの最小値と最大値を保持しているので、クエリのフィルタ条件などに合致しないブロックを読み飛ばすことができる。ソートキーでソートされていないと同じ値のデータがあちこちのブロックに散らばるため、ソート…

Amazon Redshift で結合キーでKEY分散 vs EVEN 分散

AWS

計測 EVEN分散 =# select count(l_orderkey) from lineitem join orders on o_orderkey = l_orderkey and l_shipdate > '1996-01-01'; count ------------ 7518747994 (1 row) Time: 150000.148 ms (02:30.000) クエリID取得 =# select pg_last_query_id(); …

Amazon Redshift のスライス毎の行の偏りを確認する

AWS

svv_table_info.skew_rows (スライス単位での最大行数/最小行数)の値が大きいと偏っている。 =# select * from svv_table_info where "table" = 'lineitem_dk_shipdate1'; -[ RECORD 1 ]----------+--------------------------------- database | tpch_3tb…

psql のプロンプトにデータベース名を表示する

%/はデータベース名 PostgreSQLのコマンドラインの動きを改善してみる | Yakst 例 ~/.psqlrc \set PROMPT1 '%[%033[1;32m%]%/ %n %`date '+%Y%m%d_%H:%M:%S'` %R%#%[%033[0m%] ' \set PROMPT2 '%[%033[1;32m%]%R%#%[%033[0m%] ' \timing on \set HISTSIZE 10…

Amazon Redshift で2列で内部結合しているクエリで分散キー指定列の違いによる比較

AWS

Amazon Redshift で2列で内部結合しているクエリで、分散キーが2列のうち偏りのある列にした場合と偏りのない列にした場合の比較。 検証結果 偏りのある列(l_shipdate)が分散キー select sum(a.l_quantity), count(a.l_orderkey), min(a.l_shipdate), max(…

Amazon Redshift で結合キーに関数を使うとソートマージ結合にならないパターン

AWS

Amazon Redshift で結合キーに関数を使うとソートマージ結合にならないパターン。 検証結果 結合キーに collate 関数を使用 クライアントからみた実行時間は25分47秒。 select a.l_linenumber, avg(a.l_quantity) from lineitem a, lineitem b where collate…

Amazon Redshift のソートマージ結合とハッシュ結合を比較する

AWS

ソートマージ結合になる条件 両テーブルの結合キーが分散キーとソートキーに指定されている 結合対象表の未ソート率が20%未満 Merge Join Typically the fastest join, a merge join is used for inner joins and outer joins. The merge join is not used f…

Amazon Redshift でソートキーの順番による IO 量の差を見る

AWS

前提 Cloud Data Warehouse Benchmark Derived from TPC-H のテーブル・データを使用 環境: ue-east-1 に Amazon Redshift クラスター(ra3.4xlarge x 4 node)を作成 計測結果 効率的なソートキー 実行時間(クライアント側): 2.8 秒 =# select min(l_ship…

Amazon Redshift で Cloud Data Warehouse Benchmark Derived from TPC-H を実行してみる

AWS

Amazon Redshift で Cloud Data Warehouse Benchmark Derived from TPC-H を実行してみる。 ue-east-1 に Amazon Redshift クラスターを作成する ra3.4xlarge x 4 node Cloud Data Warehouse Benchmark Derived from TPC-H の 100GB のデータセットをロード…

Amazon Redshift でクエリを実行しても SVL_QUERY_METRICS に記録されない場合

AWS

SVL_QUERY_METRICS は STL_QUERY_METRICS を参照しており、STL_QUERY_METRICS は1 秒未満で実行されるクエリセグメントは記録されない場合があるためと思われる。 STL_QUERY_METRICS Contains metrics information, such as the number of rows processed, C…