Я просматривал документы AWS для красного смещения и похоже, что Функция INTCAP может решить ваш вариант использования
Для справки => https: //docs.aws.amazon. com / redshift / latest / dg / r_INITCAP.html
Краткое описание (скопировано)
Функция INITCAP создает первую букву каждого слова в строке заглавные буквы, а любые последующие буквы делаются (или оставляются) строчными. Поэтому важно понимать, какие символы (кроме пробелов) функционируют как разделители слов. Символ разделителя слов - это любой не алфавитно-цифровой символ, включая знаки пунктуации, символы и управляющие символы. Все следующие символы являются разделителями слов:
! "# $% & amp; '() * +, -. /:; < =>? @ [\] ^ _` {|} ~
И в вашем случае вы объявили имя поля как event_date который преобразуется в Event_Date.
И затем вы можете использовать функцию REPLACE для замены подчеркивания '_'
Для справки => https: // docs. aws.amazon.com/redshift/latest/dg/r_REPLACE.html
Я нашел ответ в том же духе, о котором говорил Кристиан (создание нового потока для выполнения writeToOut ()):
@MTOM
@WebService
class Example {
@WebMethod
public @XmlMimeType("application/octet-stream") DataHandler service() {
// Create piped output stream, wrap it in a final array so that the
// OutputStream doesn't need to be finalized before sending to new Thread.
PipedOutputStream out = new PipedOutputStream();
InputStream in = new PipedInputStream(out);
final Object[] args = { out };
// Create a new thread which writes to out.
new Thread(
new Runnable(){
public void run() {
writeToOut(args);
((OutputStream)args[0]).close();
}
}
).start();
// Return the InputStream to the client.
DataSource ds = new ByteArrayDataSource(in, "application/octet-stream");
DataHandler dh = new DataHandler(ds);
return dh;
}
}
Это немного сложнее из-за final
, но, насколько я могу судить, это правильно. Когда поток запускается, он блокируется при первой попытке вызвать out.write ()
; в то же время входной поток возвращается клиенту, который разблокирует запись, прочитав данные. (Проблема с моими предыдущими реализациями этого решения заключалась в том, что я не
Шаблон оболочки? : -).
Пользовательская реализация javax.activation.DataSource (всего 4 метода), чтобы сделать это?
return new DataHandler(new DataSource() {
// implement getOutputStream to return the stream used inside writeToOut()
...
});
У меня нет IDE для тестирования, поэтому я делаю только предложение. Мне также понадобится общий макет writeToOut :-).
Извините, я сделал это только для C #, а не java, но я думаю, что ваш метод должен запускать поток для выполнения "writeToOut (out);" в парралеле. Вам нужно создать специальный поток и передать его новому потоку, который передаст этому потоку writeToOut. После запуска потока вы возвращаете этот объект потока вызывающей стороне.
Если у вас есть только метод, который записывает в поток и возвращает впоследствии, и другой метод, который потребляет поток и возвращает его впоследствии, другого пути нет.
] Конечно, сложнее всего заполучить такой многопоточный безопасный поток: он должен блокировать каждую сторону, если внутренний буфер переполнен.
Не знаю, работает ли Java-pipe-stream для этого.