partition削除

Amazon Athenaにおいて表題の件をメモ。

■ 環境

  • Amazon Athena

■ partition

パーティションの一覧の取得は下記の通り。

show partitions testtable1;

自身が使用しているAthenaのテーブルでは下記のような結果を得られた。”year“と”month“でパーティションを切っている。

year=2017/month=4
year=2017/month=8
year=2016/month=12
  :

このパーティションの中で不要なものが存在したので削除を行いたい。下記のようにパーティションを削除することができる。

alter table testtable1 drop partition (year=2016, month=12)

以上。

■ 関連

Athenaのpartition一覧

SQLで文字列の長さを取得

MySQLにおいて表題の通り。ド忘れしたのでメモしておく。

■ 環境

  • MySQL 3.6.5

■ SQL

カラムの型が”varchar“の時に下記のように取得した。

mysql> select length(カラム) from テーブル;

これで取得する対象のカラムに入っているデータが英数字等であれば単純に文字数が取得できる。しかし入っているデータが日本語等の文字であった場合かつテーブルの定義で”utf8“であったりすると、1文字が3byteなので3倍の数値が返ってきた。

ちなみにMySQLでは純粋に文字列数を取得するには”char_length“で返ってくるようだ。

mysql> select char_length(カラム) from テーブル;

こっちだとイメージ通りである。

ちなみに、、自身は”AWS Athena“で同じように”char_length“を使いたかったのだが、そんな関数はないとエラーになったので”length“を使用して実行する事ができた。

mysql> help length
Name: 'LENGTH'
Description:
Syntax:
LENGTH(str)

Returns the length of the string str, measured in bytes. A multi-byte
character counts as multiple bytes. This means that for a string
containing five two-byte characters, LENGTH() returns 10, whereas
CHAR_LENGTH() returns 5.
  :
mysql>
mysql> help char_length
Name: 'CHAR_LENGTH'
Description:
Syntax:
CHAR_LENGTH(str)

Returns the length of the string str, measured in characters. A
multi-byte character counts as a single character. This means that for
a string containing five two-byte characters, LENGTH() returns 10,
whereas CHAR_LENGTH() returns 5.
  :
mysql>

以上。

Athenaのpartition一覧

表題を単なるメモ。

■ 環境

  • AWS Athena

■ athena

AWS Athenaを使用し始めている。とりあえずCSVのデータを投入し触ってみている。で、キレイにパーティションが分かれそうなデータ構造なので年月毎でパーティションを分けている。テーブルを作成した時はこんな感じ。

CREATE EXTERNAL TABLE IF NOT EXISTS test.table1 (
  :
) PARTITIONED BY (
  year string,
  month string
)
  :
) LOCATION 's3://withsin/testtable/'
TBLPROPERTIES ('has_encrypted_data'='false');

この”s3://withsin/testtable/“配下に”2017/04/“といったディレクトリ(?)を掘って、日付毎にデータを投入している。パーティションは下記のように作成。

ALTER TABLE table1 ADD PARTITION (year='2017', month='04') location 's3://withsin/testtable/2017/04/';

パーティションをいくつか作っていて、このパーティションは作ったっけ?となってしまった…。作成済みのパーティション一覧を取得したかったが、`SHOW CREATE TABLE`では情報が得られなかった。また管理画面からも確認する項目が見つけられず。というわけでこれもクエリを実行する。

show partitions table1;

これで下記のような結果が得られた。

year=2017/month=04
year=2016/month=08
year=2017/month=01
  :

MySQLでパーティションは使ったことがないのだが、MySQLでも同じように取得できるのであろう。

以上。