private function generateCopyCommand($tempTableName, $columns, CsvFile $csvFile, array $options) { $tableNameEscaped = $this->tableNameEscaped($tempTableName); $columnsSql = implode(', ', array_map(function ($column) { return $this->quoteIdentifier($column); }, $columns)); $command = "COPY {$tableNameEscaped} ({$columnsSql}) " . " FROM {$this->connection->quote($csvFile->getPathname())}" . " CREDENTIALS 'aws_access_key_id={$this->s3key};aws_secret_access_key={$this->s3secret}' " . " DELIMITER '{$csvFile->getDelimiter()}' "; if ($csvFile->getEnclosure()) { $command .= "QUOTE {$this->connection->quote($csvFile->getEnclosure())} "; } if ($csvFile->getEscapedBy()) { // raw format if ($csvFile->getEscapedBy() != '\\') { throw new Exception('Only backshlash can be used as escape character'); } $command .= " ESCAPE "; } else { $command .= " CSV "; } if (!empty($options['isGzipped'])) { $command .= " GZIP "; } if (!empty($options['isManifest'])) { $command .= " MANIFEST "; } $command .= " IGNOREHEADER " . $this->getIgnoreLines(); // custom options $command .= " " . implode(" ", $options['copyOptions']); return $command; }
private function generateCopyCommand($tableName, CsvFile $csvFile) { $csvOptions = []; $csvOptions[] = sprintf('FIELD_DELIMITER = %s', $this->quote($csvFile->getDelimiter())); if ($this->getIgnoreLines()) { $csvOptions[] = sprintf('SKIP_HEADER = %d', $this->getIgnoreLines()); } if ($csvFile->getEnclosure()) { $csvOptions[] = sprintf("FIELD_OPTIONALLY_ENCLOSED_BY = %s", $this->quote($csvFile->getEnclosure())); $csvOptions[] = "ESCAPE_UNENCLOSED_FIELD = NONE"; } elseif ($csvFile->getEscapedBy()) { $csvOptions[] = sprintf("ESCAPE_UNENCLOSED_FIELD = %s", $this->quote($csvFile->getEscapedBy())); } $command = sprintf("COPY INTO %s FROM %s \n CREDENTIALS = (AWS_KEY_ID = %s AWS_SECRET_KEY = %s)\n REGION = %s\n FILE_FORMAT = (TYPE=CSV %s)", $this->nameWithSchemaEscaped($tableName), $this->quote($csvFile->getPathname()), $this->quote($this->s3key), $this->quote($this->s3secret), $this->quote($this->s3region), implode(' ', $csvOptions)); return $command; }
private function importFile($stagingTableName, CsvFile $csvFile) { $files = $this->getFilesToDownloadFromManifest($csvFile->getPathname()); foreach ($files as $path) { $newCsvPath = new CsvFile($path, $csvFile->getDelimiter(), $csvFile->getEnclosure(), $csvFile->getEscapedBy()); $this->importTable($stagingTableName, $newCsvPath); } }