Wenn Sie die Daten in Amazon S3 (im Folgenden S3) in Red Shift einfügen, können Sie dies problemlos tun, da es sich um dasselbe AWS handelt. Wenn Sie jedoch dasselbe mit BigQuery tun, erfolgt dies weiterhin über Google Cloud Storage (im Folgenden: GCS). Praktisch. GCS kann mit S3 kompatibel gemacht werden, mit dem von S3 zu GCS und umgekehrt migriert werden kann.
Dieser Artikel beschreibt, wie das mit Python und Boto gemacht wird.
Für Anwendungen wie das Durchführen einer Kopie in der Befehlszeile können die folgenden besseren Methoden verwendet werden.
gsutil
Normalerweise ist der einfachste Weg, Daten zwischen S3 und GCS zu kopieren, die Verwendung des Befehls gsutil
.
https://cloud.google.com/storage/docs/gsutil
$ gsutil cp s3://bucket/file gs://bucket/file
Machen Sie GCS über die GCS-Verwaltungskonsole kompatibel. Aktivieren Sie den Betriebszugriff. (Referenzartikel: Hochladen in Google Cloud Storage mit AWS CLI oder AWS SDK für PHP)
Die folgenden Informationen sind für S3 und GCS erforderlich, holen Sie sie daher im Voraus ein. Natürlich benötigt der Autor eine Schreibgenehmigung.
boto
Installieren Sie es, um boto zu verwenden.
$ pip install boto
Zum Glück kann boto sowohl in S3 als auch in GCS lesen und schreiben (GCS-bezogene Klassen werden durch Erben von S3-bezogenen Klassen implementiert). Es wird zum Lesen und Schreiben in Python verwendet.
bucket2bucket.py
from boto.gs.connection import GSConnection
from boto.s3.connection import S3Connection
gs_bucket = GSConnection(
'GS_ACCSESS_KEY', 'GS_SECRET_ACCSESS_KEY').get_bucket('GS_BUCKET_NAME')
s3_bucket = S3Connection(
'S3_ACCSESS_KEY', 'S3_SECRET_ACCSESS_KEY').get_bucket('S3_BUCKET_NAME')
bucket2bucket.py
from StringIO import StringIO
def bucket2bucket(from_bucket, to_bucket, file_name):
io = StringIO()
try:
from_bucket.get_key(file_name).get_file(io)
io.seek(0)
key = to_bucket.new_key(key_name=file_name)
key.set_contents_from_file(io, replace=True) #Ersetzen ermöglicht das Überschreiben
finally:
io.close()
Andere Argumente wie "get_file" und "set_contents_from_file" können angegeben werden. Es wird daher empfohlen, die Dokumentation zu überprüfen.
bucket2bucket.py
bucket2bucket(s3_bucket, gs_bucket, 'spam')
bucket2bucket(gs_bucket, s3_bucket, 'egg')
Auf diese Weise kann boto S3 und GCS auf dieselbe Weise verarbeiten, sodass Sie problemlos Daten miteinander austauschen können. Darüber hinaus ist "Bucket.copy_key" für das Kopieren in denselben Bucket vorbereitet. Es wird daher empfohlen, diesen zu verwenden.
Recommended Posts