text:
muso japan
a Japanese indie music blog
Author: Matthew Bedford
The Best Japanese Shoegaze and Dream Pop Releases of 2020
Despite being awful in just about every way imaginable, 2020 was actually a strong year for Japanese music. The shoegaze scene in particular saw the emergence of some more young and impressive talent and with live music largely crippled by COVID-19, it at very least felt like more bands were striving to improve their online presence. Bandcamp Fridays seemed to encourage more Japanese artists to give the platform a chance, online streaming events took off, and some artists even sought creative ways to stay active by way of intimate studio session streams or pedalboard/gear walkthroughs. There was an obvious lack of in-person contact this year, but it opened up new means of artist-audience connections.
The fun part of looking back on a year is to reflect on the themes and trends of a particular scene. There was a lot of genre crossover in Japanese shoegaze in 2020, as gradually the marriage of punk/hardcore and shoegaze that has become quite popular in the US in particular over the past few years has gradually continued to work its way over to Japan. There was plenty of emo, guitar pop, post rock, indie pop, and early 00s Japanese alternative rock blended into shoegaze in 2020, that the scene felt more diverse than ever, and that is reflected in this best of the year list.
A couple of the annual "don't e-mail me about this, please!" notes before we start. Hitsuji Bungaku's POWERS album is a monster, but it doesn't qualify for this list despite a couple of absolutely killer shoegaze-leaning songs. Tokyo newcomers BLOOD PICK ME deserve some credit for their impressive output this year. Working against them was the fact that, as always, there was loads of tough competition in the single an EP categories.
☆ ★ BEST SINGLE ★ ☆
"Talking to Myself/Smoke from Cigarettes" by Morningwhim
2020's best new band was responsible for the year's best single. Nagoya newcomers, Morningwhim, put out two singles last year – "Most of the Sun Shines" and "Talking to Myself/Smoke from Cigarettes". The latter was a Pains-esque jangle-fest riding a persistent wave of guitar fuzz. Style-wise, this is right up there with the best of the shoegaze-indie pop crossover that really dominated the middle- to late-2010s. A tremendous start from the Japanese indie band to keep an eye on moving forward (the other single is excellent, too!).
The race for best single was so close that Optloquat's "Red Orange/Someday" felt like more of a 1a than a "best of the rest". "Red Orange" might have been my favorite Japanese shoegaze song of 2020. The band's sound blends Slowdive-y textural depth with early 2000s Japanese alt rock dynamic and vocals. It's music like this that really makes Japanese shoegaze more interesting than its global counterparts.
Another year, another COLLAPSE appearance on a Muso Japan best of the year list. This year's entry was another epic display of the heaviest shoegaze that Japan has to offer by way of the band's single "DROWN". The Saitama outfit dropped the new single in March and it's a slow-paced belter that checks all of the requisite shoegaze boxes.
Kyoto's tip top nap returned in 2020 with "Kotoba no Hana/Haru no Naka e", two tracks of some of the sweetest dream pop to come out of Japan this year. "Haru no Naka e" really carried the release thanks to Natsumi Yamamoto's ability to tear your heart to shreds with her breathy vocals. The melody in the chorus is tear-jerking stuff and the gently bouncy backdrop is the perfect accompaniment.
Tokyo's Stomp Talk Modstone have been around for a while now, but in 2020 the band really emerged as they released an absurd amount of music in such a short period of time. There were plenty of candidates to round out this list, but the best of the bunch was July, 2020 single "Hurt". Stomp Talk Modstone draws on the standard names of the genre, but still manages to keep it fresh. Had I posted this at the beginning of the year when I should have, I would have recommended that you stay tuned for their album. But since it's already out, I can say with certainty that you should check it out.
★ ☆ ★ BEST EP ★ ☆ ★
"shaman's daughter" by My Dead Girlfriend
Just like the long-awaited returns of Coaltar of the Deepers in 2018 and Tokyo Shoegazer in 2019, a new release from My Dead Girlfriend was perhaps the most notable event in the scene in 2020. "Shaman's Daughter", partially a soundtrack to an upcoming indie film of the same name, was the band's first new music in 5 years. The Kensei Ogata-produced effort covers a lot of ground tonally from cold, edgy post-punk to power pop with bouts of breakbeats, and is loaded with explosive energy and catchy hooks that you expect from a My Dead Girlfriend album. The best EP of the year and hands down the most fun as well. (CD Japan)
Nuit's debut narrowly missed out on my best of 2018 list, but their followup surged to the top of this one. And it's definitely not due to any lack of competition. "In My Nature" is a massive step forward for the band thanks to some truly powerful guitars and insanely catchy vocal hooks. The balance on the EP is great – Makoto Gomi once again handled the production – and while the band maintained the dramatic vocal style that has defined their sound, it felt much better complemented this time around. Lead single and absolute banger "Forget-Me-Not" is Nuit's new signature track.
Tokyo's Moon in June came out of nowhere with their debut EP "Uminari". Fluttery dream pop has long been a staple of the Japanese shoegaze scene, and while simple pop beats and gentle leads are very much part of Moon in June's core sound, their ability to build to big, blurry guitar walls at just the right times sets them apart. The songs on the EP are extremely well-crafted.
Something of a Japanese indie supergroup, Tokyo's Ferri-Chrome dropped some tasty shoegazey guitar-pop on us in 2020 with their debut EP "from a window". Led by indie mainstay Manabu Kurogome with the support of members from For Tracy Hyde and Boyish, Ferri-Chrome's sound is a throwback to 90s shoegaze a la Pale Saints or, for a domestic comp, first wave Japanese shoegaze.
Rounding off the list is fan favorite Seventeen Years Old and Berlin Wall, who offered a little bit of a different look in 2020 with their "Abstract" EP. The Tokyo outfit focused less on being a shoegaze band and more on working their shoegaze influence into a wider exploration of genres, and the result is a very fresh, very pleasant new version of itself.
★ ☆ ★ BEST ALBUM ★ ☆ ★
"In Memory Of" by Yukla Down
Tokyo's Yukla Down blew me away in 2018 with their debut EP "In Demonstrationem", and their 2020 full length debut In Memory Of stood as hands down the best of what was a strong field for the year. The band takes its shoegaze foundation in a lot of interesting directions, touching on post rock and emo; rolling it back to early My Bloody Valentine one moment and then into a glitchy soundscape the next. There's not a dull moment on the entire album and the way it wraps up with the twelve-and-a-half-minute post rock epic "Denali" is absolutely perfect.
I'll spare you my usual comments about how idol music bugs me. RAY is wonderful. For a while, comparing the shoegaze idol group to the now defunct ・・・・・・・・・ was logical, as RAY was seemingly the next step for the management group. But RAY has produced nothing but quality since forming up in 2019. For their full-length debut, Pink, the outfit was supported by an all-star cast of shoegaze composers, including Azusa Suga (For Tracy Hyde), Yusuke Hata (cruyff in the bedroom), and Hiroyuki Imamura (The Florist), as well as Ringo Deathstarr's Elliott Frazier. I may not be totally on board with so-called "alt idol" music, but in at least this case, I'm warming up to the idea. (Tower Records Japan)
Simple, straightforward, and a bit rough around the edges. On 10 songs, Forbear delivered precisely that many tracks of fuzzy noise pop nostalgia. The album is an uncomplicated flow of sweet vocal melodies over a gritty backdrop and bouncy beats with the occasional breakdown or outburst of scorching guitar noise. There's nothing to overthink about the album. It's just really, really enjoyable. (LIKE A FOOL RECORDS)
Two years after dropping their debut demo single that I absolutely adored, Kiwi put out Before You're Gone, a collection of addictive, danceable shoegaze pop slathered in Ride influence. Unlike a lot of bands that draw on the poppiest of shoegaze's holy trinity, Kiwi is unafraid to let fly waves of messy guitar noise. The album is loaded with catchy numbers and, seated smack in the middle of the tracklist, "Behind the Times" is premium swoony promgaze. (Tower Records Japan)
SPOOL's sophomore effort Cyan/Amber was one of the more highly-anticipated releases of the year, due in large part to the attention the band garnered as a result of a stellar 2019 debut. The album is basically split into two parts, with its "Cyan" half featuring more of the grungy, moody style that the band has largely been known for. The "Amber" offers some lighter-toned melancholy, drifting more toward the realm of dream pop. While it may lack the individual standout song power of the debut, Cyan/Amber as a whole is an impressively worked listening experience.
Author Matthew BedfordPosted on February 6, 2021 Categories Muso Japan, Featured, New Release, Reviews, UncategorizedTags 2020, best, collapse, dream pop, dreampop, ferri-chrome, forbear, Japan, Japanese, kiwi, moon in june, morningwhim, my dead girlfriend, nuit, optloquat, ray, Seventeen Years Old And Berlin Wall, shoegaze, spool, stomp talk modstone, tip top nap, yukla down, シューゲイザー, 死んだ僕の彼女Leave a comment on The Best Japanese Shoegaze and Dream Pop Releases of 2020
[Korea] FOG – "Fogesque"
Though Korea hasn't produced as steady a flow of shoegaze as continental counterparts such as Japan, Taiwan, and Indonesia, its output with regard to the genre has been solid. Bands like Vidulgi OoyoO and UHF Seoul, and genre-adjacent acts such as Aseul and Say Sue Me have been notable representatives of Korean shoegaze and dream pop over the past decade-plus. However, beyond a small number of bands and a Korean Loveless tribute, delving into the dreamy realm of the domestic scene has been difficult.
At the start of 2019, there was a brief surge of Korean shoegaze acts on Bandcamp. The most impressive of these bands was FOG, whose "Shine/DreamingDreamingDreaming" single was an immediate attention grabber. The band went on to publish a number of songs including a previously released demo album and it was obvious that this Seoul-based quartet was something special. This week, they dropped their proper full-length debut, Fogesque, and introduced themselves as the new face of Korean shoegaze.
FOG's strength is building incredible space using a cascade of guitars so deep and drenched in reverb that comparisons to Slowdive were immediate and perfectly understandable. Crafting within that vast space using dancing melodies and chilling, whispering vocals results in sheer bliss at a drugged-out stroll of a pace. Fogesque is a perfect showcase of that ability and more via a blend of new music and some beefed up versions of older songs.
Four of the tracks on Fogesque are new versions of songs that first appeared on the aforementioned demo album from 2018, The Harder We Push, The Faster Well All Get Outta Here. The standout of the callback portion of the album is "Dark Room", which was hauntingly gorgeous in its demo form, but received a considerable amount of additional depth thanks to the production work of drummer Hwanho Lee (aka Bang9suk). Perhaps the most fun result of the uptick in production quality is "Dehumidifier", which taps along before a very harsh turn into a squall of guitar noise. Admittedly, the dynamic change is a bit jarring at first, but there's something wholly satisfying about such a violent eruption from the peaceful lull that leads up to it.
The new music on the album shows the band's ability to continue writing fresh, strong shoegaze tunes using their usual formula. If there's one single best moment on the entire album it's the exhale into the chorus of lead single "Nocturne". The burst of guitars and piercing melodic lead is tonal perfection. And while the fadeout at the end of the track feels like a bit of a premature come down, the dense, dreamy haze continues into "Listless" and on into "Acid Dream".
Whether intentional or not, the placement of bouncy, whimsical dream pop tune "Dearest" smack in the middle of the album feels like a strategic palate cleanser before the wall of sound kicks back in on "Space Space Space Shuttle". From there, the band dives into deep textural exploration en route to the absolutely stunning finale of "Dark Room".
After almost two years of buildup, FOG's new album is a statement that they are the band at the forefront of Korean shoegaze in this new decade. Whether or not there's a new wave of domestic artists poised to follow their lead, the young foursome has a bright future ahead of them on the back of a beautiful, deep sound that should appeal to a wide audience far outside their home country. Fogesque is just the beginning.
You can purchase Fogesque in digital or limited edition CD formats over at FOG's Bandcamp page here: https://phoque0twisted.bandcamp.com/album/fogesque
Fogesque by FOG
Author Matthew BedfordPosted on November 17, 2020 Categories New Release, Article, Bands, Featured, Muso Asia, Muso Japan, Reviews, UncategorizedTags dream pop, fog, korea, seoul, shoe gazer, shoegazeLeave a comment on [Korea] FOG – "Fogesque"
My Dead Girlfriend – "shaman's daughter"
Word of My Dead Girlfriend hitting the studio reached social media earlier this year, but the subsequent talk of a new release quickly died down amidst a global pandemic and general tumult of 2020. Fast forward to the early fall, and the news of the band's upcoming EP "shaman's daughter", felt more surprising than it did something we'd been anticipating for roughly half a year.
The journey toward the new EP started in early 2019 when My Dead Girlfriend front man, Yuki Ishikawa, was contacted by indie filmmaker, Yusuke Isaka. Isaka had begun working on a dark comedy-horror movie called "Shaman's Daughter" (シャーマンの娘), and, having been a fan of My Dead Girlfriend since high school, reached out to the band about submitting music for the film. By June, Ishikawa was ready to commit to the project, and from late-2019 to early-2020 the band was working on new material.
Two of the tracks from the EP, lead single "rebirth and karma" and the closer "winter reminds me of you" appear in the film as the ending theme and background music, respectively. Additionally, plenty of earlier My Dead Girlfriend songs are used throughout. Though only two of the five songs on the new release ended up in the film, Ishikawa cites the band's involvement in the project as a major reason that the EP came to fruition – he also noted some interesting similarities between the film's plot and My Dead Girlfriend's own worldview – and felt it appropriate to carry some of the image of the film over to the release via the EP's title and jacket art.
From purely a musical standpoint, "shaman's daughter" pulls together My Dead Girlfriend's range of sounds into a very cohesive collection of songs. For a short-form release, there are a lot of looks into the My Dead Girlfriend soundscape. "The secret of sunflowers" is a dark, tom-thumping march of an intro that waxes and wanes in intensity, swerving between shoegaze and post punk. It's a positively jarring way to kick off the EP. From there, you get the EP's signature song, "rebirth and karma", which is a shoegaze track through and through, pushing the lush guitars to the forefront of the mix, but with a delicate balance between the harsh tones and the fluttering twin vocal melodies that define My Dead Girlfriend's sound. "Zaiakukan no nichiyoubi", the only track on the EP that was not written specifically for the film, is probably the most My Dead Girlfriend song on the whole thing, walking the fine line between blaring shoegaze and candy-sweet pop and boasting the most addictive chorus on the release.
"Iliad" is a fun bit of chaos, going from essentially a simple, pacey power pop tune to a breakbeat-driven guitar tone exploration. Ishikawa talked a bit about working with engineer Kensei Ogata in the studio, saying, "he suggested a lot of interesting ways to use our guitars and our pedals". Whatever those suggestions may have been, you get the feeling that they worked their way into "iliad" as well as perhaps the opening number. On the other hand, "winter reminds me of you", is straightforward. It's as sweet and nostalgic a pop song as the title implies and you can at least imagine the sort of scene it might be used as a backdrop for in the film. The dreamy ambient outro is a nice touch.
Overall, "shaman's daughter" is a really strong effort from My Dead Girlfriend, and the production work of engineer Kensei Ogata really pushes the song quality, through. Given the relationship of the album to the film, it will be interesting to see how the songs – old and new – will be used there, and that context adds a different and interesting dimension to the release. At the moment, it sounds like the movie will drop sometime in 2021, though releases can be a bit unpredictable right now. You can check out a number of different trailers in the meantime if you're interested.
While talking about plans for the band coming into 2020, Ishikawa spoke of plans for the band's first performances overseas that were dashed by the coronavirus pandemic. Even with the situation seemingly improving in Japan in recent months and limited capacity live events resuming, My Dead Girlfriend remains cautious of touring in support of "shaman's daughter". While the rest of 2020 and perhaps well into 2021 maybe be difficult to plan for, Ishikawa expressed a desire to continue making new music and put out a new full album "in the near future". Stay tuned.
While there are plans to make "shaman's daughter" available for streaming on Apple Music and Spotify (with no plans for a Bandcamp release), for the time being it will be exclusively a physical release. You can purchase copies internationally here.
For information on the film, "Shaman's Daughter", you can visit the project's crowdfunding site here (Japanese language) for details and trailers.
The video for "rebirth and karma", which includes footage from the movie, can be seen below.
"Shaman's Daughter" film trailer #1:
Author Matthew BedfordPosted on November 9, 2020 Categories Albums, Bands, Featured, Muso Japan, New Release, ReviewsTags alternative, J-pop, Japan, my dead girlfriend, noise pop, shoegaze, shoegazer, シューゲイザー, 国内, 日本, 死んだ僕の彼女Leave a comment on My Dead Girlfriend – "shaman's daughter"
The past few years have seen a steady flow of new and upcoming artists in the Japanese scene. In 2019, however, the story was more about big name returns and the domestic scene really holding steady with really strong releases from some of its best-known artists. Tokyo Shoegazer and Coaltar of the Deepers dominated the buzz, we saw a very consistent flow of releases, and the final year of the 2010s felt like a confirmation that few if any genres have been as consistently well-represented as shoegaze in Japanese indie music over the past decade. It was a really strong year.
Before getting into the best of 2019 lists, there are a couple notes. First off, once again, this was a really tough year to break down. Since I crunched the format of these lists into a "best 5" style, it's been a real challenge. Sometimes that only applies to the EP portion, but this year all of them gave me trouble. Also, Tokyo Shoegazer had a massive year, and while their Crystallize reissue deserves all the love it got all over the world, it doesn't qualify for the list. Nor does their stealthily released Moondiver album, which was sold on their China tour, but which will likely receive a proper release in 2020.
That about does it. Here are my best releases of 2019.
"Revive" by Tokyo Shoegazer
As I mentioned in the intro, the sudden and surprising return of Tokyo Shoegazer was pretty much the biggest story in Japanese shoegaze in 2019. Though the Crystallize reissue and Moondiver releases generated more buzz, their "Revive" single featured the band's first new music in years. It was an emphatic announcement of their return to activity, highlighted by the epic seven-and-a-half-minute lead track, "Light".
Indie legends Coaltar of the Deepers had a similar comeback in 2019, which marked the 25th anniversary of the band's debut The Visitors from Deepspace album. Having released two new singles in 2018, Deepers' return wasn't as big a surprise, but the band teased a new single over the course of their anniversary tour. The track, titled "HALFLIFE" dropped on digital platforms in early December, and is very much a throwback to the band's genre-bending shoegaze prime.
From two long-standing veterans of Japanese shoegaze to one of the finest of the latest crop of indie bands to pop up this decade, Luby Sparks followed up a fantastic 2018 with a brand new single in 2019. "Somewhere" is a gorgeous 4AD-style dream pop tune that jangles along into a super catchy, emotional chorus. It's romantic, teenage nostalgia and it's beautiful. The single's B-side is a remix by Cocteau Twins' Robin Guthrie that really piles on the feels.
Lost in all the big comeback announcements was maybe my personal highlight of 2019, which was Osaka's Ether Feels getting back together two years after splitting. With a mostly fresh lineup around band leader Tomo Iwashita, Ether Feels put out its latest single titled "Kowloon Sunset" and got back to gigging. The band picked up right where it left off with its heart-wrenching brand of melancholic shoegaze pop.
Kowloon Sunset by Ether Feels
The Earth Earth has been pretty quiet since releasing a single in 2016, gigging sporadically around their home base in Aomori, so their latest single was another pleasant surprise this past year. While nods to early My Bloody Valentine aren't exactly rare among shoegaze bands around the world, The Earth Earth is one of the few Japanese bands to have consistently gone that route over the years and the results have been excellent. "Story is Wrong" is nothing new, but it hits the spot.
story is wrong by THE EARTH EARTH
I'm taking liberties here by adding one more entry to my singles list. COLLAPSE's latest three-track release, "ENDOGENIC REBIRTHDAY", was actually at the top of my EP list before I realized the band had labeled it a single. Their sound continues to sit at the heavier end of the Japanese shoegaze spectrum, and on "RITUAL", they show off a nice blend of contrasting styles in hardcore and shoegaze that isn't all that common in Japan.
ENDOGENIC REBIRTHDAY by COLLAPSE
"EASTOKLAB" by EASTOKLAB
As usual there were a number of EPs vying for the top spot on my year end list, but the one that I listened to and enjoyed the most was the self-titled debut EP from Nagoya's EASTOKLAB. Their brand of dream pop is some of the most unique in a scene that has a lot of creative takes on the genre. From dreamy atmospheres, tight grooves, and the ability to seamlessly transition to big blurry guitar walls, EASTOKLAB possesses a diverse sonic arsenal, and frontman Hayato Hioki's vocal style is uniquely his.
The Waterfalls' 2016 self-titled release garnered a lot of attention in the Japanese indie scene, and this past year they put out a double EP release consisting of "In the Blue Lagoon" and "Youthlight". There are some subtle differences in style between the two EPs, but overall over the eight tracks that they released they showed more of the outstanding songwriting that we saw on the debut.
My troubled relationship with idol music has been well-documented to this point, but I really enjoyed "Blue", the debut EP from RAY. Shortly after ・・・・・・・・・ disbanded, RAY emerged as the new face of shoegaze idol music (under the same management as their predecessors) and promised a highly-anticipated collaboration with Ringo Deathstarr. They delivered just that on the new EP, the lead single of which, titled "Meteor", was composed by the Austin shoegaze trio's Elliot Frazier. With two more tracks composed by Azusa Suga of For Tracy Hyde and Yusuke Hata of cruyff in the bedroom, RAY's focus on quality songwriting over gimmicks is a positive sign.
Formerly known simply as kano, Tokyo-based bedroom producer azsakano put out another EP full of whimsical dreamy pop tunes in 2019. Just like her previous works, "Romantics" features some really nice layering of textures and sweet vocal melodies soaked in reverb and sunken deep within the mix. Azsakano is an expert at crafting lo-fi dream pop that is simple on the surface but gives the listener a lot to dive into.
Romantics by azsakano
On their latest EP, "square", Nagoya's mishca do a lot more texturally than they have in the past, while staying true to their very mellow, straightforward approach to songwriting. If there was one knock on the band in the past it's that they didn't develop songs enough to really carry the slow, methodical backbone of their music. Musically, "square" offers considerably more dynamic range, and the male-female vocals complement each other really well.
"New Young City" by For Tracy Hyde
This can't be much of a shock. For Tracy Hyde had a lot of competition this year, but their third full length album, New Young City, sits atop this list. Once again, For Tracy Hyde drew on western shoegaze and dream pop and Japanese pop influences and pieced together an album that is loaded with energy and emotion. As a body of work, its structure is similar to that of their successful sophomore effort, but New Young City shows the band going even bigger with its sound. It's loaded with song of the year contenders.
SPOOL's self-titled full length debut seemed like a lock for the album of the year throughout most of 2019, and it wouldn't be a stretch to say it actually was. It's a powerful, well-produced album that demonstrates some really versatile songwriting. SPOOL goes from deep and dreamy to dark and edge, infusing their shoegaze sound with elements of 90s US alternative rock and playful dream pop. This was the breakout we were waiting for from the four-piece.
Monocism's Fukou album was the band's first proper release since the end of the previous decade, and one of the most pleasant surprises of the year. Over the past few years, frontman Tomoya Shiono has been working on some wonderful solo material under the moniker 宗凛 (Sourin), and monocism's new album plays like an extension of that with its stuttering, mathy beats blanketed in thick, dreamy layers of noise and fluttering guitar leads.
風光 – Fukou by monocism
Taffy once again had a quietly solid year, highlighted by their fifth studio album, Deep Dark Creep Love. As is often the case with a Taffy release, there's nothing groundbreaking about the album, but producing good shoegaze in 2019 is largely based on taking elements of the genre that have been done in the past and working them into something interesting. That is what Taffy do so well and it's why their new record is an excellent listen. Their rendition of Bowie's "Never Let Me Down" is gorgeous, too.
The final spot on this list was the hardest to decide on. Cattle, Smokebees, NOAH, and a lot of other bands put out really good albums, and Kiiro Records' FOREVER SHOEGAZE double release was probably the label's best compilation to date. But I'm going with Polly's latest release, Flowers. Produced by The Novembers' Yusuke Kobayashi, Polly's third album is gorgeously dark and dreamy with tremendous depth thanks to a combination of airy guitars and synths.
Author Matthew BedfordPosted on January 1, 2020 Categories Albums, Article, Featured, Muso Japan, New Release, ReviewsTags 2019, alternative, azsakano, best, coaltar of the deepers, dream pop, eastoklab, ether feels, for tracy hyde, Japan, luby sparks, mishca, monocism, polly, ray, shoegaze, spool, taffy, the earth earth, the waterfalls, Tokyo shoegaze, シューゲイザー, ドリームポップ, 日本Leave a comment on The Best Japanese Shoegaze and Dream Pop Releases of 2019
A Farewell to Kinoko Teikoku
One of the most beloved Japanese alternative bands over the better part of the past decade has called it quits. Kinoko Teikoku announced today that bassist Shigeaki Taniguchi decided to leave the band and focus on taking over his family's temple. Feeling that it wasn't right to move on with a new bassist, the remaining three members went their own separate ways bringing an end to a twelve year run that saw the band go from indie darlings to major label signees, while also becoming one of the most identifiable Japanese shoegaze acts overseas.
Despite their status abroad as one of the most popular Japanese shoegaze acts – thanks in large part to their spot on Steven Tanaka's Next Music from Tokyo tour in Canada in 2013 – Kinoko Teikoku was never truly a part of a Japanese shoegaze scene that was taking off on its third and most successful wave, despite a period of activity that aligned perfectly with the domestic shoegaze boom. Within a year of releasing demo EP, "Yoru ga Aketara", they signed with Daizawa Records, a subsidiary of launchpad indie label UK Project, and released the best material they would ever put out in "Uzu ni Naru". In 2013, the band released its defining debut album, "Eureka", and fans of Japanese shoegaze had a new favorite artist. With regard to shoegaze, Kinoko Teikoku's legacy is centered more around popularizing the domestic scene overseas than any impact they had domestically. They are often cited in shoegaze communities as the band that introduced people to the Japanese scene, but rarely mentioned within the country when talking about influential artists.
Following the release of the "Long Goodbye" EP in 2013, Kinoko Teikoku's sound shifted from the harsh, 90s US alternative-infused shoegaze that fans had fallen in love with to a more major label friendly pop rock sound. It was shortly thereafter that Kinoko Teikoku was signed to EMI, after which they would release an EP and a handful of albums. The Kinoko Teikoku listening experience shifted from one of anticipation to the hope that the band might roll things back to their past sound. It was never fair, but it was always going to happen. The band's popularity was finally soaring domestically, and, save for a few creative nods to earlier material, the major label transition was in full force. With each new release came more whiny nostalgia – I accept blame for being part of all of that – and that escalated further when frontwoman Chiaki Sato launched her solo project, which just felt like an extension of the whole change.
In a way, the news that Kinoko Teikoku is over provides a section of a fanbase that was never going to be happy with them again with a sense of relief. The longing for something that was never going to come back is gone. Now we can listen to those first few releases without obnoxiously using them as the standard for future material. And the good news for those devotees who stuck with the band until the very end is that things didn't end on a sour note. Comments from the members on the band's site were all very positive, though of course not without the sadness that is expected from a group of people who had been playing together for 12 years. A reunion may not be likely in the near future, but it's not out of the question.
Kinoko Teikoku has also meant a lot to this site. The band was a big focus of Muso Japan when I started it up in late 2011, and has always been a source of fun and thoughtful discussions. I had the pleasure of seeing them for the first and only time in early 2012 at a small, empty venue in Nagoya, and it will always be one of the most satisfying live experiences in my time in Japan. At their peak, Kinoko Teikoku's combination of a furious but gorgeous guitar assault and absolutely heavenly vocals resulted in some of the best shoegaze to ever come out of Japan. The band will be terribly missed, but their contribution to the Japanese music scene and the connection they were able to make with fans overseas will not be forgotten.
A post shared by Matthew Bedford (@musojapan) on Apr 29, 2012 at 7:54pm PDT
This is the video that made me fall in love with Kinoko Teikoku for the first time:
Author Matthew BedfordPosted on May 28, 2019 Categories Article, Bands, Featured, Muso Japan, ProfilesTags break up, Japan, kinoko teikoku, shoegaze, tokyo, きのこ帝国, シューゲイザー, 解散4 Comments on A Farewell to Kinoko Teikoku
Otom – "You Lost Me"
Tokyo-based shoegaze producer Otom is back with his first track of 2019, titled "You Lost Me". The new song is a bit more upbeat than the billowy electronic shoegaze he wowed us with last year, though if it's too poppy for your taste Otom included an edited version that's more or less a glitchy remix showcasing the track's textural backdrop. Otom sits atop a fairly long list of recording-only Japanese music projects that I wish would get a band together and take it to the stage. His style of music seems like it would translate better than a lot of the lo-fi bedroom pop that also populates my list, but for whatever reason it doesn't seem like that will be happening. In the meantime, we're likely to get quite a few more singles this year, so at least we have that to look forward to.
You can pick up all of Otom's work via Bandcamp.
You Lost Me by otom
Author Matthew BedfordPosted on March 4, 2019 Categories Albums, Article, Bands, Featured, Muso Japan, New Release, ReviewsTags dream pop, dreampop, Japan, otom, shoegaze, tokyo, trackmakerLeave a comment on Otom – "You Lost Me"
The Rainy – "Film"
While it's true that the Nagoya scene has been a bit lacking over the years with regard to shoegaze bands with a reputation outside the city, there's been a steady flow of alternative bands largely based around Tsurumai live house Daytrip and its sister venue Daytrive. That section of the Nagoya indie scene is extremely underrated, but it boasts real quality and considerable diversity. Gloomy post rock outfit, The Rainy, has been one of the bands at the center of the current wave of Nagoya shoegaze-adjacent artists, and they followed up an impressive 2018 with the release of their debut EP, "Film", at the start of this year.
The Rainy is one of a number of Nagoya bands that identify to some degree as shoegaze, but the way in which they draw on the genre is extremely subtle. The band's approach to songwriting is based largely on gradual crescendos from light, often acoustic, intros to deeper emotional finishes. "Film" is basically a showcase of that style of song development, highlighted by the heart-wrenching fan-favorite that is the EP's title track. Though a lot of what The Rainy does is repetitive as a general process, they change it up by feinting and teasing the flows of songs, picking their shots and setting them up effectively. The placement of "Yulunohi" smack in the middle of the EP creates a nice change of pace with its the piqnic-esque moody intensity. It might be somewhat difficult to truly appreciate The Rainy without seeing their spectacular live performances, but "Film" is a nice introduction to what the band does.
You can listen to The Rainy's "Film" EP on most streaming services and purchase it via iTunes. Physical copies are also available for purchase via File-Under Records.
You can hear the title track below:
Author Matthew BedfordPosted on March 4, 2019 March 4, 2019 Categories Albums, Article, Bands, Featured, Muso Japan, New Release, ReviewsTags film, nagoya, new release, post rock, shoegaze, the rainyLeave a comment on The Rainy – "Film"
Noah – "1st Demo"
The pool of new Japanese shoegaze talent was apparently so deep in 2018 that some managed to slip through the cracks. That's the case with Kanazawa's Noah, who released a 3-track demo, titled "1st demo", on Bandcamp in October. As it's extremely obviously a demo, it's not the most polished release, but it's still clean enough to get a good scouting report on Noah. "Hakuchuumu" is a big slow billowy shoegaze track that reminds me a lot of softsurf. "Kaitei Kara" has a similar vibe to it with a kicked up tempo, and the balance of the male-female twin vocals is perfect. "Twilight" feels a bit more like a Japanese shoegaze song with the very up-front lead fluttering over a poppier, more subdued backdrop, but Noah nails the vocal harmonies again here. For a demo, this is really impressive stuff, and this band should be on any Japanese shoegaze fan's radar.
You can grab Noah's demo for whatever you'd like to pay over at Bandcamp.
1st Demo by Noah
Author Matthew BedfordPosted on February 25, 2019 Categories Albums, Bands, Featured, Muso Japan, New Release, ReviewsLeave a comment on Noah – "1st Demo"
Spool – "Spool"
For years now, Tokyo's Spool has been readying itself for a breakout. The all-female four-piece, which has become affectionately referred to as "Japan's Warpaint", has been a massive draw in its local scene, garnered attention from music fans overseas, and put out a handful of quality releases both in Japan and internationally. The announcement late last year of its self-titled debut full-length felt like a statement that Spool was ready to establish itself among the elite of the Japanese indie scene.
The Warpaint comparison almost feels lazy, but it makes sense. The shoegaze tag fits as well as the various comps to bands like The Smashing Pumpkins, Sonic Youth, and My Bloody Valentine, but each only to a certain extent. On the album Spool pulls a bit from the edgier side of 90s US alternative music as well as the dreamy UK melancholy and fuzzy guitar walls that have the band seated comfortably in the Japanese shoegaze scene. It's a total throwback to everything that rules about 90s music. Spool has really keyed in on that general concept and written exceptional songs around it.
There are some familiar songs on the record, with "Springpool" and fan favorite "Sway, fadeaway" joining the stunningly shoegazey lead single "Be My Valentine" in getting beefed up new versions courtesy of producer and magic love drummer Kazuaki Kondo. Lead track "nightescape" is a dark, dreamy number turned absolute belter that, along with my personal favorite song on the album, "Let Me Down" really showcases frontwoman Ayumi Kobayashi's range. The deep, breathy vocals in the verses on the latter, in particular, are teeming with attitude and there's something quietly powerful about them as they trade off with the sad, raw chorus line.
Overall, the shoegaze influence on the album is perhaps stronger than expected, highlighted by gloomy, thickly textured tracks like "Winter" and "Morphine". "Blooming in the Morning" adds a little dream pop into the mix as well, softening a bit of the album's edge with some bouncy sweetness. The closer, "No, thank you", which is a more cleanly mixed version than the one that appeared on last year's Total Feedback 2018, wraps up the album with a blistering guitar attack and distorted vocals.
Expectations were high coming into the full length debut, and the band delivered. Though Spool's influences are by no means unique in the current Japanese scene, the way in which they are able to put them together and really balance their sound over the course of the record is. The ability for a band to wear its influences on its sleeve without bottle-necking itself and at the same time maintaining some cohesiveness over the course of an album is something to appreciate. Spool has done it here.
You can pick up Spool's self-titled album via Testcard Records' Bandcamp page (overseas) or domestically from the label's online store. It's also available for streaming on Apple Music, though there are some issues due to another band called Spool having released an album called Spool in 1998.
Below you can find the videos for "Be My Valentine" and "Blooming in the Morning".
Author Matthew BedfordPosted on February 13, 2019 Categories Albums, Bands, Featured, Muso Japan, New Release, ReviewsTags alternative, Japan, new release, shoegaze, spool, tokyo, warpaintLeave a comment on Spool – "Spool"
Acidclank – "Apache Sound"
Less than six months after releasing its debut full length, "Addiction", Osaka's Acidclank is back with a suddenly released follow up titled Apache Sound. The album, which was released via indie label Ano(t)raks, is the first recorded material since frontman Yota Mori announced that Acidclank will return to being a solo project after a couple years of operating as a full band.
While the majority of Acidclank's catalog has been a nod to 90s UK indie music, the new record takes a pretty sudden turn into chilled-out electro pop. True to Mori's M.O. as a songwriter, Apache Sound is not a straightforward dive into a specific sound, but an exploration of it providing a lot of different looks. The title track has a mellow city pop vibe to it, with auto-tuned vocals that make the occasional appearance throughout the album. There's some hip-hop and R&B infused pop on "Ghost Record" and "Shy", respectively, while "Funeral" and "Downtime Acid Jam" are more textural electronic pop instrumentals. "Dubs" is a warm synth track with a super catchy chorus that feels like it could fit comfortably anywhere in Acidclank's catalog.
From the blippy, ambient lead track "Riot", though, Apache Sound is an obvious departure from Acidclank's previous releases. That is until you get to the album's closer, "Addict of Daydreaming". Perhaps the track's title is telling of some personal need to go back to hazy, dreamy shoegaze, but when I got to the song I thought I had accidentally queued up an entirely different album. To be honest, this song's inclusion is pretty disrupting to the flow of the overall album. That being said, though, it also might be the best shoegaze song that Mori has written yet.
You can pick up the new album for free via the link to Ano(t)raks' Bandcamp page below.
Apache Sound by Acidclank
Author Matthew BedfordPosted on February 11, 2019 Categories Albums, Featured, Muso Japan, New Release, ReviewsTags electro pop, electronic, Japan, osaka, synth popLeave a comment on Acidclank – "Apache Sound"
Make Believe Melodies
FILE-UNDER RECORDS
Kyoto Shoegazer
Muso Japan Bandcamp
Archives Select Month February 2021 (1) November 2020 (2) January 2020 (1) May 2019 (1) March 2019 (2) February 2019 (5) January 2019 (5) December 2018 (4) November 2018 (9) October 2018 (5) August 2018 (2) July 2018 (6) May 2018 (1) January 2018 (1) November 2017 (1) August 2017 (1) May 2017 (2) March 2017 (1) February 2017 (1) January 2017 (1) December 2016 (1) November 2016 (4) October 2016 (1) September 2016 (1) August 2016 (1) July 2016 (4) June 2016 (2) May 2016 (2) April 2016 (2) February 2016 (2) January 2016 (1) December 2015 (1) November 2015 (2) October 2015 (2) August 2015 (2) July 2015 (2) June 2015 (2) May 2015 (3) February 2015 (1) January 2015 (2) December 2014 (3) November 2014 (3) October 2014 (4) September 2014 (1) August 2014 (3) July 2014 (4) June 2014 (8) May 2014 (4) April 2014 (5) March 2014 (7) February 2014 (20) January 2014 (5) December 2013 (4) October 2013 (2) August 2013 (1) June 2013 (1) May 2013 (2) April 2013 (3) February 2013 (8) January 2013 (3) November 2012 (1) October 2012 (1) March 2012 (2) February 2012 (5) January 2012 (5)
muso japan Proudly powered by WordPress


text:
package org.apache.hadoop.hive.metastore;

import org.apache.hadoop.hive.common.StatsSetupConst;
import org.apache.hadoop.hive.metastore.api.ColumnStatistics;
import org.apache.hadoop.hive.metastore.api.ColumnStatisticsDesc;
import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj;
import org.apache.hadoop.hive.metastore.api.MetaException;
import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
import org.apache.hadoop.hive.metastore.api.Table;
import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
import org.apache.hadoop.hive.metastore.events.UpdatePartitionColumnStatEvent;
import org.apache.hadoop.hive.metastore.events.UpdatePartitionColumnStatEventBatch;
import org.apache.hadoop.hive.metastore.messaging.EventMessage;
import org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics;
import org.apache.hadoop.hive.metastore.tools.SQLGenerator;
import org.apache.hadoop.hive.metastore.txn.TxnUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.hadoop.conf.Configuration;

import javax.jdo.PersistenceManager;
import javax.jdo.datastore.JDOConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;

import static org.apache.hadoop.hive.common.StatsSetupConst.COLUMN_STATS_ACCURATE;
import static org.apache.hadoop.hive.metastore.HMSHandler.getPartValsFromName;

/**
 * This class contains the optimizations for MetaStore that rely on direct SQL access to
 * the underlying database. It should use ANSI SQL and be compatible with common databases
 * such as MySQL (note that MySQL doesn't use full ANSI mode by default), Postgres, etc.
 *
 * This class separates out the statistics update part from MetaStoreDirectSql class.
 */
class DirectSqlUpdateStat {
  private static final Logger LOG = LoggerFactory.getLogger(DirectSqlUpdateStat.class.getName());
  PersistenceManager pm;
  Configuration conf;
  DatabaseProduct dbType;
  int maxBatchSize;
  SQLGenerator sqlGenerator;
  private static final ReentrantLock derbyLock = new ReentrantLock(true);

  public DirectSqlUpdateStat(PersistenceManager pm, Configuration conf,
                                          DatabaseProduct dbType, int batchSize) {
    this.pm = pm;
    this.conf = conf;
    this.dbType = dbType;
    this.maxBatchSize = batchSize;
    sqlGenerator = new SQLGenerator(dbType, conf);
  }

  /**
   * {@link #lockInternal()} and {@link #unlockInternal()} are used to serialize those operations that require
   * Select ... For Update to sequence operations properly.  In practice that means when running
   * with Derby database.  See more notes at class level.
   */
  private void lockInternal() {
    if(dbType.isDERBY()) {
      derbyLock.lock();
    }
  }

  private void unlockInternal() {
    if(dbType.isDERBY()) {
      derbyLock.unlock();
    }
  }

  void rollbackDBConn(Connection dbConn) {
    try {
      if (dbConn != null && !dbConn.isClosed()) dbConn.rollback();
    } catch (SQLException e) {
      LOG.warn("Failed to rollback db connection ", e);
    }
  }

  void closeDbConn(JDOConnection jdoConn) {
    try {
      if (jdoConn != null) {
        jdoConn.close();
      }
    } catch (Exception e) {
      LOG.warn("Failed to close db connection", e);
    }
  }

  void closeStmt(Statement stmt) {
    try {
      if (stmt != null && !stmt.isClosed()) stmt.close();
    } catch (SQLException e) {
      LOG.warn("Failed to close statement ", e);
    }
  }

  void close(ResultSet rs) {
    try {
      if (rs != null && !rs.isClosed()) {
        rs.close();
      }
    }
    catch(SQLException ex) {
      LOG.warn("Failed to close statement ", ex);
    }
  }

  static String quoteString(String input) {
    return "'" + input + "'";
  }

  void close(ResultSet rs, Statement stmt, JDOConnection dbConn) {
    close(rs);
    closeStmt(stmt);
    closeDbConn(dbConn);
  }

  private void populateInsertUpdateMap(Map<PartitionInfo, ColumnStatistics> statsPartInfoMap,
                                       Map<PartColNameInfo, MPartitionColumnStatistics> updateMap,
                                       Map<PartColNameInfo, MPartitionColumnStatistics>insertMap,
                                       Connection dbConn) throws SQLException, MetaException, NoSuchObjectException {
    StringBuilder prefix = new StringBuilder();
    StringBuilder suffix = new StringBuilder();
    Statement statement = null;
    ResultSet rs = null;
    List<String> queries = new ArrayList<>();
    Set<PartColNameInfo> selectedParts = new HashSet<>();

    List<Long> partIdList = statsPartInfoMap.keySet().stream().map(
            e -> e.partitionId).collect(Collectors.toList()
    );

    prefix.append("select \"PART_ID\", \"COLUMN_NAME\" from \"PART_COL_STATS\" WHERE ");
    TxnUtils.buildQueryWithINClause(conf, queries, prefix, suffix,
            partIdList, "\"PART_ID\"", true, false);

    for (String query : queries) {
      try {
        statement = dbConn.createStatement();
        LOG.debug("Going to execute query " + query);
        rs = statement.executeQuery(query);
        while (rs.next()) {
          selectedParts.add(new PartColNameInfo(rs.getLong(1), rs.getString(2)));
        }
      } finally {
        close(rs, statement, null);
      }
    }

    for (Map.Entry entry : statsPartInfoMap.entrySet()) {
      PartitionInfo partitionInfo = (PartitionInfo) entry.getKey();
      ColumnStatistics colStats = (ColumnStatistics) entry.getValue();
      long partId = partitionInfo.partitionId;
      ColumnStatisticsDesc statsDesc = colStats.getStatsDesc();
      for (ColumnStatisticsObj statisticsObj : colStats.getStatsObj()) {
        PartColNameInfo temp = new PartColNameInfo(partId, statisticsObj.getColName());
        if (selectedParts.contains(temp)) {
          updateMap.put(temp, StatObjectConverter.
                  convertToMPartitionColumnStatistics(null, statsDesc, statisticsObj, colStats.getEngine()));
        } else {
          insertMap.put(temp, StatObjectConverter.
                  convertToMPartitionColumnStatistics(null, statsDesc, statisticsObj, colStats.getEngine()));
        }
      }
    }
  }

  private void updatePartColStatTable(Map<PartColNameInfo, MPartitionColumnStatistics> updateMap,
                                          Connection dbConn) throws SQLException, MetaException, NoSuchObjectException {
    PreparedStatement pst = null;
    for (Map.Entry entry : updateMap.entrySet()) {
      PartColNameInfo partColNameInfo = (PartColNameInfo) entry.getKey();
      Long partId = partColNameInfo.partitionId;
      MPartitionColumnStatistics mPartitionColumnStatistics = (MPartitionColumnStatistics) entry.getValue();
      String update = "UPDATE \"PART_COL_STATS\" SET ";
      update += StatObjectConverter.getUpdatedColumnSql(mPartitionColumnStatistics);
      update += " WHERE \"PART_ID\" = " + partId + " AND "
              + " \"COLUMN_NAME\" = " +  quoteString(mPartitionColumnStatistics.getColName());
      try {
        pst = dbConn.prepareStatement(update);
        StatObjectConverter.initUpdatedColumnStatement(mPartitionColumnStatistics, pst);
        LOG.debug("Going to execute update " + update);
        int numUpdate = pst.executeUpdate();
        if (numUpdate != 1) {
          throw new MetaException("Invalid state of  PART_COL_STATS for PART_ID " + partId);
        }
      } finally {
        closeStmt(pst);
      }
    }
  }

  private void insertIntoPartColStatTable(Map<PartColNameInfo, MPartitionColumnStatistics> insertMap,
                                          long maxCsId,
                                          Connection dbConn) throws SQLException, MetaException, NoSuchObjectException {
    PreparedStatement preparedStatement = null;
    int numRows = 0;
    String insert = "INSERT INTO \"PART_COL_STATS\" (\"CS_ID\", \"CAT_NAME\", \"DB_NAME\","
            + "\"TABLE_NAME\", \"PARTITION_NAME\", \"COLUMN_NAME\", \"COLUMN_TYPE\", \"PART_ID\","
            + " \"LONG_LOW_VALUE\", \"LONG_HIGH_VALUE\", \"DOUBLE_HIGH_VALUE\", \"DOUBLE_LOW_VALUE\","
            + " \"BIG_DECIMAL_LOW_VALUE\", \"BIG_DECIMAL_HIGH_VALUE\", \"NUM_NULLS\", \"NUM_DISTINCTS\", \"BIT_VECTOR\" ,"
            + " \"AVG_COL_LEN\", \"MAX_COL_LEN\", \"NUM_TRUES\", \"NUM_FALSES\", \"LAST_ANALYZED\", \"ENGINE\") values "
            + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

    try {
      preparedStatement = dbConn.prepareStatement(insert);
      for (Map.Entry entry : insertMap.entrySet()) {
        PartColNameInfo partColNameInfo = (PartColNameInfo) entry.getKey();
        Long partId = partColNameInfo.partitionId;
        MPartitionColumnStatistics mPartitionColumnStatistics = (MPartitionColumnStatistics) entry.getValue();

        preparedStatement.setLong(1, maxCsId);
        preparedStatement.setString(2, mPartitionColumnStatistics.getCatName());
        preparedStatement.setString(3, mPartitionColumnStatistics.getDbName());
        preparedStatement.setString(4, mPartitionColumnStatistics.getTableName());
        preparedStatement.setString(5, mPartitionColumnStatistics.getPartitionName());
        preparedStatement.setString(6, mPartitionColumnStatistics.getColName());
        preparedStatement.setString(7, mPartitionColumnStatistics.getColType());
        preparedStatement.setLong(8, partId);
        preparedStatement.setObject(9, mPartitionColumnStatistics.getLongLowValue());
        preparedStatement.setObject(10, mPartitionColumnStatistics.getLongHighValue());
        preparedStatement.setObject(11, mPartitionColumnStatistics.getDoubleHighValue());
        preparedStatement.setObject(12, mPartitionColumnStatistics.getDoubleLowValue());
        preparedStatement.setString(13, mPartitionColumnStatistics.getDecimalLowValue());
        preparedStatement.setString(14, mPartitionColumnStatistics.getDecimalHighValue());
        preparedStatement.setObject(15, mPartitionColumnStatistics.getNumNulls());
        preparedStatement.setObject(16, mPartitionColumnStatistics.getNumDVs());
        preparedStatement.setObject(17, mPartitionColumnStatistics.getBitVector());
        preparedStatement.setObject(18, mPartitionColumnStatistics.getAvgColLen());
        preparedStatement.setObject(19, mPartitionColumnStatistics.getMaxColLen());
        preparedStatement.setObject(20, mPartitionColumnStatistics.getNumTrues());
        preparedStatement.setObject(21, mPartitionColumnStatistics.getNumFalses());
        preparedStatement.setLong(22, mPartitionColumnStatistics.getLastAnalyzed());
        preparedStatement.setString(23, mPartitionColumnStatistics.getEngine());

        maxCsId++;
        numRows++;
        preparedStatement.addBatch();
        if (numRows == maxBatchSize) {
          preparedStatement.executeBatch();
          numRows = 0;
        }
      }

      if (numRows != 0) {
        preparedStatement.executeBatch();
      }
    } finally {
      closeStmt(preparedStatement);
    }
  }

  private Map<Long, String> getParamValues(Connection dbConn, List<Long> partIdList) throws SQLException {
    List<String> queries = new ArrayList<>();
    StringBuilder prefix = new StringBuilder();
    StringBuilder suffix = new StringBuilder();
    Statement statement = null;
    ResultSet rs = null;

    prefix.append("select \"PART_ID\", \"PARAM_VALUE\" "
            + " from \"PARTITION_PARAMS\" where "
            + " \"PARAM_KEY\" = 'COLUMN_STATS_ACCURATE' "
            + " and ");
    TxnUtils.buildQueryWithINClause(conf, queries, prefix, suffix,
            partIdList, "\"PART_ID\"", true, false);

    Map<Long, String> partIdToParaMap = new HashMap<>();
    for (String query : queries) {
      try {
        statement = dbConn.createStatement();
        LOG.debug("Going to execute query " + query);
        rs = statement.executeQuery(query);
        while (rs.next()) {
          partIdToParaMap.put(rs.getLong(1), rs.getString(2));
        }
      } finally {
        close(rs, statement, null);
      }
    }
    return partIdToParaMap;
  }

  private void updateWriteIdForPartitions(Connection dbConn, long writeId, List<Long> partIdList) throws SQLException {
    StringBuilder prefix = new StringBuilder();
    List<String> queries = new ArrayList<>();
    StringBuilder suffix = new StringBuilder();

    prefix.append("UPDATE \"PARTITIONS\" set \"WRITE_ID\" = " + writeId + " where ");
    TxnUtils.buildQueryWithINClause(conf, queries, prefix, suffix,
            partIdList, "\"PART_ID\"", false, false);

    Statement statement = null;
    for (String query : queries) {
      try {
        statement = dbConn.createStatement();
        LOG.debug("Going to execute update " + query);
        statement.executeUpdate(query);
      } finally {
        closeStmt(statement);
      }
    }
  }

  private Map<String, Map<String, String>> updatePartitionParamTable(Connection dbConn,
                                                                     Map<PartitionInfo, ColumnStatistics> partitionInfoMap,
                                                                     String validWriteIds,
                                                                     long writeId,
                                                                     boolean isAcidTable)
          throws SQLException, MetaException {
    Map<String, Map<String, String>> result = new HashMap<>();
    boolean areTxnStatsSupported = MetastoreConf.getBoolVar(conf, ConfVars.HIVE_TXN_STATS_ENABLED);
    PreparedStatement statementInsert = null;
    PreparedStatement statementDelete = null;
    PreparedStatement statementUpdate = null;
    String insert = "INSERT INTO \"PARTITION_PARAMS\" (\"PART_ID\", \"PARAM_KEY\", \"PARAM_VALUE\") "
            + "VALUES( ? , 'COLUMN_STATS_ACCURATE'  , ? )";
    String delete = "DELETE from \"PARTITION_PARAMS\" "
            + " where \"PART_ID\" = ? "
            + " and \"PARAM_KEY\" = 'COLUMN_STATS_ACCURATE'";
    String update = "UPDATE \"PARTITION_PARAMS\" set \"PARAM_VALUE\" = ? "
            + " where \"PART_ID\" = ? "
            + " and \"PARAM_KEY\" = 'COLUMN_STATS_ACCURATE'";
    int numInsert = 0;
    int numDelete = 0;
    int numUpdate = 0;

    List<Long> partIdList = partitionInfoMap.keySet().stream().map(
            e -> e.partitionId).collect(Collectors.toList()
    );

    // get the old parameters from PARTITION_PARAMS table.
    Map<Long, String> partIdToParaMap = getParamValues(dbConn, partIdList);

    try {
      statementInsert = dbConn.prepareStatement(insert);
      statementDelete = dbConn.prepareStatement(delete);
      statementUpdate = dbConn.prepareStatement(update);
      for (Map.Entry entry : partitionInfoMap.entrySet()) {
        PartitionInfo partitionInfo = (PartitionInfo) entry.getKey();
        ColumnStatistics colStats = (ColumnStatistics) entry.getValue();
        List<String> colNames = colStats.getStatsObj().stream().map(e -> e.getColName()).collect(Collectors.toList());
        long partWriteId = partitionInfo.writeId;
        long partId = partitionInfo.partitionId;
        Map<String, String> newParameter;

        if (!partIdToParaMap.containsKey(partId)) {
          newParameter = new HashMap<>();
          newParameter.put(COLUMN_STATS_ACCURATE, "TRUE");
          StatsSetupConst.setColumnStatsState(newParameter, colNames);
          statementInsert.setLong(1, partId);
          statementInsert.setString(2, newParameter.get(COLUMN_STATS_ACCURATE));
          numInsert++;
          statementInsert.addBatch();
          if (numInsert == maxBatchSize) {
            LOG.debug(" Executing insert " + insert);
            statementInsert.executeBatch();
            numInsert = 0;
          }
        } else {
          String oldStats = partIdToParaMap.get(partId);

          Map<String, String> oldParameter = new HashMap<>();
          oldParameter.put(COLUMN_STATS_ACCURATE, oldStats);

          newParameter = new HashMap<>();
          newParameter.put(COLUMN_STATS_ACCURATE, oldStats);
          StatsSetupConst.setColumnStatsState(newParameter, colNames);

          if (isAcidTable) {
            String errorMsg = ObjectStore.verifyStatsChangeCtx(
                    colStats.getStatsDesc().getDbName() + "." + colStats.getStatsDesc().getTableName(),
                    oldParameter, newParameter, writeId, validWriteIds, true);
            if (errorMsg != null) {
              throw new MetaException(errorMsg);
            }
          }

          if (isAcidTable &&
                  (!areTxnStatsSupported || !ObjectStore.isCurrentStatsValidForTheQuery(oldParameter, partWriteId,
                          validWriteIds, true))) {
            statementDelete.setLong(1, partId);
            statementDelete.addBatch();
            numDelete++;
            if (numDelete == maxBatchSize) {
              statementDelete.executeBatch();
              numDelete = 0;
              LOG.debug("Removed COLUMN_STATS_ACCURATE from the parameters of the partition "
                      + colStats.getStatsDesc().getDbName() + "." + colStats.getStatsDesc().getTableName() + "."
                      + colStats.getStatsDesc().getPartName());
            }
          } else {
            statementUpdate.setString(1, newParameter.get(COLUMN_STATS_ACCURATE));
            statementUpdate.setLong(2, partId);
            statementUpdate.addBatch();
            numUpdate++;
            if (numUpdate == maxBatchSize) {
              LOG.debug(" Executing update " + statementUpdate);
              statementUpdate.executeBatch();
              numUpdate = 0;
            }
          }
        }
        result.put(partitionInfo.partitionName, newParameter);
      }

      if (numInsert != 0) {
        statementInsert.executeBatch();
      }

      if (numUpdate != 0) {
        statementUpdate.executeBatch();
      }

      if (numDelete != 0) {
        statementDelete.executeBatch();
      }

      if (isAcidTable) {
        updateWriteIdForPartitions(dbConn, writeId, partIdList);
      }
      return result;
    } finally {
      closeStmt(statementInsert);
      closeStmt(statementUpdate);
      closeStmt(statementDelete);
    }
  }

  private static class PartitionInfo {
    long partitionId;
    long writeId;
    String partitionName;
    public PartitionInfo(long partitionId, long writeId, String partitionName) {
      this.partitionId = partitionId;
      this.writeId = writeId;
      this.partitionName = partitionName;
    }

    @Override
    public int hashCode() {
      return (int)partitionId;
    }

    @Override
    public boolean equals(Object o)
    {
      if (this == o) {
        return true;
      }
      if (o == null) {
        return false;
      }
      if (!(o instanceof PartitionInfo)) {
        return false;
      }
      PartitionInfo other = (PartitionInfo)o;
      if (this.partitionId != other.partitionId) {
        return false;
      }
      return true;
    }
  }

  private static class PartColNameInfo {
    long partitionId;
    String colName;
    public PartColNameInfo(long partitionId, String colName) {
      this.partitionId = partitionId;
      this.colName = colName;
    }

    @Override
    public int hashCode() {
      return (int)partitionId;
    }

    @Override
    public boolean equals(Object o)
    {
      if (this == o) {
        return true;
      }
      if (o == null) {
        return false;
      }
      if (!(o instanceof PartColNameInfo)) {
        return false;
      }
      PartColNameInfo other = (PartColNameInfo)o;
      if (this.partitionId != other.partitionId) {
        return false;
      }
      if (this.colName.equalsIgnoreCase(other.colName)) {
        return true;
      }
      return false;
    }
  }

  private Map<PartitionInfo, ColumnStatistics> getPartitionInfo(Connection dbConn, long tblId,
                                                                 Map<String, ColumnStatistics> partColStatsMap)
          throws SQLException, MetaException {
    List<String> queries = new ArrayList<>();
    StringBuilder prefix = new StringBuilder();
    StringBuilder suffix = new StringBuilder();
    Statement statement = null;
    ResultSet rs = null;
    Map<PartitionInfo, ColumnStatistics> partitionInfoMap = new HashMap<>();

    List<String> partKeys = partColStatsMap.keySet().stream().map(
            e -> quoteString(e)).collect(Collectors.toList()
    );

    prefix.append("select \"PART_ID\", \"WRITE_ID\", \"PART_NAME\"  from \"PARTITIONS\" where ");
    suffix.append(" and  \"TBL_ID\" = " + tblId);
    TxnUtils.buildQueryWithINClauseStrings(conf, queries, prefix, suffix,
            partKeys, "\"PART_NAME\"", true, false);

    for (String query : queries) {
      // Select for update makes sure that the partitions are not modified while the stats are getting updated.
      query = sqlGenerator.addForUpdateClause(query);
      try {
        statement = dbConn.createStatement();
        LOG.debug("Going to execute query <" + query + ">");
        rs = statement.executeQuery(query);
        while (rs.next()) {
          PartitionInfo partitionInfo = new PartitionInfo(rs.getLong(1),
                  rs.getLong(2), rs.getString(3));
          partitionInfoMap.put(partitionInfo, partColStatsMap.get(rs.getString(3)));
        }
      } finally {
        close(rs, statement, null);
      }
    }
    return partitionInfoMap;
  }

  /**
   * Update the statistics for the given partitions. Add the notification logs also.
   * @return map of partition key to column stats if successful, null otherwise.
   */
  public Map<String, Map<String, String>> updatePartitionColumnStatistics(Map<String, ColumnStatistics> partColStatsMap,
                                                      Table tbl, long csId,
                                                      String validWriteIds, long writeId,
                                                      List<TransactionalMetaStoreEventListener> transactionalListeners)
          throws MetaException {
    JDOConnection jdoConn = null;
    Connection dbConn = null;
    boolean committed = false;
    try {
      lockInternal();
      jdoConn = pm.getDataStoreConnection();
      dbConn = (Connection) (jdoConn.getNativeConnection());

      Map<PartitionInfo, ColumnStatistics> partitionInfoMap = getPartitionInfo(dbConn, tbl.getId(), partColStatsMap);

      Map<String, Map<String, String>> result =
              updatePartitionParamTable(dbConn, partitionInfoMap, validWriteIds, writeId, TxnUtils.isAcidTable(tbl));

      Map<PartColNameInfo, MPartitionColumnStatistics> insertMap = new HashMap<>();
      Map<PartColNameInfo, MPartitionColumnStatistics> updateMap = new HashMap<>();
      populateInsertUpdateMap(partitionInfoMap, updateMap, insertMap, dbConn);

      LOG.info("Number of stats to insert  " + insertMap.size() + " update " + updateMap.size());

      if (insertMap.size() != 0) {
        insertIntoPartColStatTable(insertMap, csId, dbConn);
      }

      if (updateMap.size() != 0) {
        updatePartColStatTable(updateMap, dbConn);
      }

      if (transactionalListeners != null) {
        UpdatePartitionColumnStatEventBatch eventBatch = new UpdatePartitionColumnStatEventBatch(null);
        for (Map.Entry entry : result.entrySet()) {
          Map<String, String> parameters = (Map<String, String>) entry.getValue();
          ColumnStatistics colStats = partColStatsMap.get(entry.getKey());
          List<String> partVals = getPartValsFromName(tbl, colStats.getStatsDesc().getPartName());
          UpdatePartitionColumnStatEvent event = new UpdatePartitionColumnStatEvent(colStats, partVals, parameters,
                  tbl, writeId, null);
          eventBatch.addPartColStatEvent(event);
        }
        MetaStoreListenerNotifier.notifyEventWithDirectSql(transactionalListeners,
                EventMessage.EventType.UPDATE_PARTITION_COLUMN_STAT_BATCH, eventBatch, dbConn, sqlGenerator);
      }
      dbConn.commit();
      committed = true;
      return result;
    } catch (Exception e) {
      LOG.error("Unable to update Column stats for  " + tbl.getTableName(), e);
      throw new MetaException("Unable to update Column stats for  " + tbl.getTableName()
              + " due to: "  + e.getMessage());
    } finally {
      if (!committed) {
        rollbackDBConn(dbConn);
      }
      closeDbConn(jdoConn);
      unlockInternal();
    }
  }

  /**
   * Gets the next CS id from sequence MPartitionColumnStatistics and increment the CS id by numStats.
   * @return The CD id before update.
   */
  public long getNextCSIdForMPartitionColumnStatistics(long numStats) throws MetaException {
    Statement statement = null;
    ResultSet rs = null;
    long maxCsId = 0;
    boolean committed = false;
    Connection dbConn = null;
    JDOConnection jdoConn = null;

    try {
      lockInternal();
      jdoConn = pm.getDataStoreConnection();
      dbConn = (Connection) (jdoConn.getNativeConnection());

      // This loop will be iterated at max twice. If there is no records, it will first insert and then do a select.
      // We are not using any upsert operations as select for update and then update is required to make sure that
      // the caller gets a reserved range for CSId not used by any other thread.
      boolean insertDone = false;
      while (maxCsId == 0) {
        String query = "SELECT \"NEXT_VAL\" FROM \"SEQUENCE_TABLE\" WHERE \"SEQUENCE_NAME\"= "
                + quoteString("org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics")
                + " FOR UPDATE";
        LOG.debug("Going to execute query " + query);
        statement = dbConn.createStatement();
        rs = statement.executeQuery(query);
        if (rs.next()) {
          maxCsId = rs.getLong(1);
        } else if (insertDone) {
          throw new MetaException("Invalid state of SEQUENCE_TABLE for MPartitionColumnStatistics");
        } else {
          insertDone = true;
          closeStmt(statement);
          statement = dbConn.createStatement();
          query = "INSERT INTO \"SEQUENCE_TABLE\" (\"SEQUENCE_NAME\", \"NEXT_VAL\")  VALUES ( "
                  + quoteString("org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics") + "," + 1
                  + ")";
          try {
            statement.executeUpdate(query);
          } catch (SQLException e) {
            // If the record is already inserted by some other thread continue to select.
            if (dbType.isDuplicateKeyError(e)) {
              continue;
            }
            LOG.error("Unable to insert into SEQUENCE_TABLE for MPartitionColumnStatistics.", e);
            throw e;
          } finally {
            closeStmt(statement);
          }
        }
      }

      long nextMaxCsId = maxCsId + numStats + 1;
      closeStmt(statement);
      statement = dbConn.createStatement();
      String query = "UPDATE \"SEQUENCE_TABLE\" SET \"NEXT_VAL\" = "
              + nextMaxCsId
              + " WHERE \"SEQUENCE_NAME\" = "
              + quoteString("org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics");
      statement.executeUpdate(query);
      dbConn.commit();
      committed = true;
      return maxCsId;
    } catch (Exception e) {
      LOG.error("Unable to getNextCSIdForMPartitionColumnStatistics", e);
      throw new MetaException("Unable to getNextCSIdForMPartitionColumnStatistics  "
              + " due to: " + e.getMessage());
    } finally {
      if (!committed) {
        rollbackDBConn(dbConn);
      }
      close(rs, statement, jdoConn);
      unlockInternal();
    }
  }
}

redpajama_set_name: RedPajamaGithub


text:
Three Songs No Flash
Beacons Of Light: Green Man 2019 Reviewed
Julian Marszalek and Patrick Clarke , August 21st, 2019 08:30
In torrential rain and beautiful sun, Green Man once again stakes its claim as one of Europe's very finest festivals, and an event that continues to evolve into something even brighter each year
Photo by Eric Aydin-Barberini
There's a gorgeous spot on the B4560 that overlooks the mountains surrounding Glanusk Park, the home of Green Man festival. It's worth taking a few moments to pull over to breath in both the fresh air and the sumptuous view of a vista that stretches far into the shimmering haze of the horizon. And then to take one last glance of the real world in the rear view mirror before heading down the hills to lose oneself in this highly anticipated annual Shangri La of music, literature, comedy and crafts.
Green Man is that rarest of festival beasts in that's it managed to evolve and grow from its folky roots without actually having to sell its soul to do it. And by widening its initial remit to embrace a wider range of musical styles and flavours the weekend becomes a rolling series of twists, turns and surprises. So no matter your circumstances and who you are there's always something of interest and substance.
This multi-generational crowd are the hardy souls prepared to go that extra mile when the weather takes a downward turn on Green Man's opening day. This comes as no surprise to the festival's many veterans who come appropriately attired, but it's impossible not to feel sorry for one unfortunate Snapped Ankles fan who really does snap one of his sliding in the mud while waiting for their late night turn in the Walled Garden. Their appearance last year in the same location saw the band set an impressively high bar. This time round they clear with it with metres to spare. And while it's a joy to see the converts properly lose their shit to the throbbing, kosmische pulses of 'I Want My Minutes Back', it pales in comparison to seeing the novices who get sucked in by 'Tailpipe'. Surely the Far Out stage beckons next year?
There's something very fitting about Green Man's backdrop, particularly in the torrential Friday rain, when it comes to Fat White Family's Friday night set. As the heavens lash downwards and mist shrouds the peaks of the Black Mountains that loom behind them, it's as if the cover of their new album Serfs Up! has come to life. Since that record's release they've been on colossal form as performers, but the scene around them lends that extra air of rumbling, ancient power to their sinister sleaze, particularly as that low, resonant chorus opens 'Tastes Good With The Money' and the sun sets behind thick dark clouds, as if they're being guided by some primordial energy.
Fat White Family, photo by Nici Eberl
The inclement weather should at least reap plenty of rewards for many of the bands playing the Far Out tent. Though it acts as a welcome shelter, it also houses many of the artists welcomed by the festival's widened booking brief, with many of them rising to the challenge with aplomb. Perhaps stung by the appalling sound that hampered his set at the Mutations festival in Brighton at the turn of the year, TVAM's Joe Oxley has wisely decided to expand the project from a solo venture to a trio that includes bass and drums. Consequently, the electronic paranoia of 'These Are Not Your Memories' is given much flesh to hang on its bones.
But when it comes to flexing muscles, Pigs Pigs Pigs Pigs Pigs Pigs Pigs are pumping iron. There's a sense of security when faced with Orange amps and speaker stacks, and when frontman Matt Baty emerges wearing shorts and a boxing dressing gown, then you know they're going for the prize. By their own admission, their psych-metal collision is forever playing Donington sometime after a Judas Priest slot, but it feels equally at home here. Rocking righteously against a muddy mix, they can claim a victory on points instead of a TKO.
Elsewhere, those with nary a care about a few drops of rain reap rich rewards from Squid's early evening post-punk disco at the Walled Garden. Such is the crackling energy with which they play 'Houseplants' that it takes some convincing that they're not wired to the mains.
If any one act is indicative of Green Man's evolution over the years then it must surely be Four Tet who headlines the Mountain Stage on a wonderfully dry Saturday night. For sure, dance and electronic music has always played its part at the festival, not least in many of the late night parties that have come to characterise the event's after-hours shenanigans, but here it takes centre stage. Four Tet has always been at the more cerebral end of beeps and bleeps, but this nonetheless remains a brilliantly paced set for those feeling the love. From the delicate chimes of 'Planet' through to the more considered grooves and pulses of 'Lush', this a welcome primer not just for the excesses that follow into the early hours, but hopefully for increased bangers on the Mountain Stage in the years to come.
Closing Saturday at Far Out, meanwhile, is Car Seat Headrest. Their rise to become one of indie rock's biggest bands has not gone unnoticed, but standing amongst a colossal crowd of euphoric fans, thousands screaming every word of every song at the top of their lungs, it's hard not be taken aback at just how massive the band are. It's a funny feeling when you're the only one in this immense throng who didn't get the memo, and a joyous scene to observe as an outsider. It's as if you're watching people have their lives changed before your very eyes.
Pigs Pigs Pigs Pigs Pigs Pigs Pigs, Photo by Parri Thomas
As for Sterolab, they are not headlining the festival, but they draw what is perhaps its biggest crowd. Their set is supreme, a blissful and otherworldly rush in the glow of a sunny Saturday evening. They're a band that immediately appeals to the most common kind of Green Man attendee, middle-aged with good taste, but what's most notable about their gig is how universally it's loved. Acid tripping moshers, old-school folk heads, drunk teenagers and the festival's sizeable population of under-fives all seem enraptured by the group's utopian sound and gorgeously deft musicianship.
Embracing Green Man's eldritch subtext are The Comet Is Coming, whose charged afterhours set separates those with a sense of adventure from folk after something more prosaic. And make no mistake; few are things are as genuinely out there as this trio. The combination of careening sax skronkage, bowel-quaking synth bass lines and frenetic beats are a little disorientating at first, but prolonged exposure results in a deliriously wonderful derangement of the senses. And it all kicks off for an excellent 'Summon The Fire'. Earlier that day, saxophonist Shabaka Hutchings is also on the Mountain Stage with Sons Of Kemet for a similarly earth-shattering set. As a musician, he and his projects are forces of nature.
Of even greater satisfaction is Hen Ogledd's earlier stunning performance, which is appropriately played out in the Far Out tent. Though their name (it's Welsh for 'The Old North') conjures up images of hand-woven sweaters, frothy bears and pipes, this is music that not only reminds you of what century we're living in, but also that there are so many musical avenues left to explore. Hen Ogledd's fusion of electronics with the distortion of traditional instruments such as the harp encapsulates the Green Man aesthetic at its very best. And while that may sound worthy but dull, it's far from reality. As evidenced by 'Sky Burial' and 'Problem Child', Hen Ogledd are underpinned by an accessible melodic sensibility that's instantly welcoming and their clear sense of fun and love of what they do is utterly infectious.
If those tired feet and an aching head are threatening to derail Green Man's final day, then Yak's high-spirited ramalama is the perfect antidote. Dialling back the more chaotic and improvised elements of their previous performances, they've instead replaced them with a focus that serves their glorious stink particularly well. Whip-smart and knife-sharp, Yak are on explosive form, not least when detonating the audience with the combustible 'Blinded By The Lies' and 'Fried'.
Sons Of Kemet, Photo by Nici Eberl
That same day, Aldous Harding's set might first seem like a crowd-pleasing wash of beautiful and easy folk music, perfectly suited for a sunny Sunday afternoon, but she's an artist of far more complexity than that. Her artistic vision does not make itself known only through her music, although that is lush and sublime on its own, but about her very presence, her strange and alien movements and her angular and intense facial expressions. She conjures a transfixing mix of darkness and light, casting an enormous blanket of otherworldly weirdness over the Brecon Beacons.
Eels, meanwhile, take a route that's somewhat less subtle. They open with a cover of The Who's 'Down In The Street', which segues with a yelp from Mark Everett into Prince's 'Raspberry Beret'. Mark Everett is on brash and manic form, his hilarious and foulmouthed monologues between songs as much of a draw as the music itself. "We played the fucking Shrek song for the kids, to make up for all the 'fucks'," he jokes after 'I Need Some Sleep', which was used in Shrek 2. It's a wild ride of a set, which also features new drummer Little Joe take lead vocals for a musical introduction to his love of drumming, performed in the style of a wholesome 1970s sitcom, goofy synchronised dancing and a catwalk strut from guitarist Jeff Lyster (aka The Chet), in tribute to his former modelling job. Musically they're tight, but as performers they're one of the weekend's very best.
Sharon Van Etten, however, has it all. Since expanding her sound with lavish and opulent new layers, her music has taken on an intricate kind of power, and as a live performer she wields it with breathtaking skill. Her set bristles with defiance and it sparkles with joy, equally magisterial when swimming in atmospheric gloom ('Memorial Day') as it is when she ramps up her penchant for the anthemic ('Comeback Kid'). When it comes to evolution, Van Etten's progression as a performer is wondrous. It is hard not to see her as a future headliner of not only Green Man, but the world's very biggest stages.
Sharon Van Etten, photo by Parri Thomas
With Idles drawing a mystifyingly large crowd over at Far Out for their by-numbers punk thud, it is left to Father John Misty to close the Mountain Stage before the ceremonial burning of the Green Man. Backed by an orchestra, dressed in a sharp suit and armed with an enviable arsenal of witty repartee, in many ways there's more than a touch of the classic, consumate performer about him. He's thrilled to be headlining, too, having spent a festival season more often than not playing a few hours before The Cure to a front row of goths unimpressed by his "bearded male harmonising", as he tell us. Though his longer, more wandering ballads grow a little wearing after a while, he creates a grand sense of occasion that makes him nothing but a crowd-pleasing closer.
Come Monday morning and there's a slight sadness in the air knowing that it's all over for another year. But even as we pull away from one last glance at that spot on the B4560 to return to what's deemed as civilisation, the road ahead becomes that little bit more easy to navigate in the knowledge that it'll lead here again in 12 months' time.
The Shock Of The Neu! Michael Rother & Green Man Festival Reviewed »
Win Green Man Tickets »
Flora, Fauna And Fractals: Green Man Review And Gallery »
Green Man Announce Initial Line-Up »
First Names For Green Man »
MORE FROM JULIAN MARSZALEK AND PATRICK CLARKE
Beacons Of Light: Green Man 2019 Reviewed »
MORE: THREE SONGS NO FLASH
Big Music: The Cure Live At Wembley Arena »
The Legacy Of The AACM: Anthony Braxton And Henry Threadgill Live In London »
Truth Music: Le Guess Who? 2022 Reviewed »
Multisensory Essence: Lunchmeat Festival 2022 Reviewed »
Space-Time Dilation: Semibreve 2022 Reviewed »

redpajama_set_name: RedPajamaCommonCrawl


text:
Cocaine: How Long Does It Stay In Your System?
by Nehita Abraham December 23, 2019 December 1, 2020
So you used cocaine when you partied last night, or maybe you use it regularly to get through the day? Either way, certain people who use cocaine worry about how long cocaine stays in the system and how long it will continue to affect them. Others are concerned about traces of the drug registering on a mandatory drug test. So, how long does cocaine stay in the system?
How long does cocaine stay in your system if you lick it?
An approximate amount of time that you will continue to experience the effects of cocaine varies by the route of administration—in other words, how you used it:
Intravenous (IV) administration = 15-20 minutes. If you inject cocaine, it obviously allowed direct entry to the bloodstream. Injecting cocaine gives heightened intensity when compared to snorting cocaine nasally.
Inhalation (smoked) = 15-25 minutes. If you smoke cocaine, the drug is vaporised. The vapours of cocaine enters the blood through the lungs. Smoking cocaine is similar to injecting in terms of the amount of time it takes to enter the bloodstream.
Intranasal use (snorted) = 45-90 minutes. When cocaine is consumed intranasal, the drug is then absorbed into the blood via the nasal tissue.
Taken by mouth = 90 minutes. This is the longest.
How long does cocaine stay in your system if taken with alcohol?
Many individuals choose to consume cocaine for social and recreational reasons. The drug helps to keep people alert and fight off fatigue. This is particularly beneficial for people who want to continue to drink alcohol into the small hours of the night.
Drinking alcohol and drinking cocaine will cause your body to store benzoylecgonine formed from the metabolization of cocaine.
If get subjected to drug tests and you consume cocaine, do not drink alcohol or caffeine as this will only slow down the process where benzoylecgonine is removed from your system via the urine.
How long does cocaine stay in your system when breastfeeding?
A mum who has used cocaine may feel 'normal' soon afterwards but her breast milk could contain the drug for 72 hours and so would need to pump and discard her breast milk until after that time has elapsed.
Euphoric highs are brief but breastmilk and urine remain cocain positive for long periods.
An infant's urine samples following exposure to cocaine through breast milk may remain positive for up to 60 hours. Mothers who snort cocaine should pump and dump breastmilk for at least 48 hours and arguably 72 hours. Passive inhalation of crack and cocaine smoke may also result in babies with positive toxicology.
Dangers to the baby:
When a mother uses cocaine in any form, the drug can get into the breast milk. Exposing your baby breastmilk after cocaine is serious and can be dangerous for a baby. A newborn baby cannot inactivate cocaine and infants can have cocaine intoxication following nursing. Symptoms include difficulty breathing and seizures in the infant. Never apply cocaine on your nipples to treat soreness. IT IS HIGHLY DANGEROUS for the baby and is known to cause seizures. Talk to your healthcare provider about all your question related to breastfeeding.
Consequences of exposure to crack cocaine by passive inhalation:
Four children were hospitalised after exposure to freebase crack cocaine smoked by their adult caregivers. Two of the children had transient drowsiness and two experienced seizures (Bateman and Heagarty 1989).
You May Like: South Florida Addiction Treatment
This case study Chasnoff (1987) is very informative. A 26-year-old mother took her 2-week-old daughter to the emergency room with symptoms of extreme irritability over the previous 4 hours. She admitted that she had snorted "large amounts" of cocaine in the first 2 months of pregnancy but had then stopped. She had however continued to binge drink large volumes of alcohol and smoke cigarettes throughout her pregnancy. The baby was born at 38 weeks weighing 3.136Kg with no abnormalities reported at delivery. Mother and baby were discharged home within 3 days exclusively breastfeeding.
When the baby was one week of age the mother stated that she had applied a "dab" of cocaine to her lower gum and then breastfed as normal. She noted no changes in the baby's behaviour or sleep.
At 2 weeks she had snorted 0.5g cocaine between 10am and 2 pm and during this time breastfed around five times. At 1pm the baby girl became markedly irritable and began to vomit and have diarrhoea. Her pupils became dilated and the mother noted that she "wouldn't focus on her face". She took the baby to the hospital at 5pm.
On admission, the baby was well hydrated and well nourished. She was tremulous and irritable with frequent startling to even minimal noise. Her weight was 3.55Kg and she showed no signs of neglect or abuse. There were some signs of exposure to high levels of alcohol in utero.
She was admitted and put on an intravenous drip whilst being monitored. She took bottles of artificial formula but was still irritable with a high-pitched cry 12 hours after the last breastfeed (exposure to cocaine). This went on for 24 hours. Irritability and tremulousness persisted throughout the first 48 hours and it wasn't until 72 hours post-exposure that the heartbeat returned to a more normal 130 beats per minute from the peak at 160 beats.
Results of toxicological studies showed cocaine and its metabolite in the mother's milk and the infant's urine initially. Milk samples were negative at 36 hours after the mother's last cocaine use and the infant's urine was negative at 60 hours after the last breastfeed.
The case was reported to the Department of Children and Family Services and was discharged home with the parents under court supervision. No mention is made of how the infant was fed at that stage and there is no long-term follow-up data other than that physical and neurological findings were normal on discharge.
How long does cocaine stay in your system during pregnancy?
During the early months of pregnancy, cocaine intake will increase chances for miscarriage. Chances of this happening may be related to the amount the woman uses during pregnancy.
Intravenous (IV) administration = 15 to 20 minutes.
Inhalation (smoked) = 15 to 25 minutes.
Intranasal use (snorted) = 45 to 90 minutes.
Taken by mouth = 90 minutes.
Cocaine goes into the placenta and enters your developing baby. The drug can be found in the urine, stool, umbilical cord and hair of newborns exposed during pregnancy. Cocaine is cleared very slowly from the developing baby in a pregnancy when compared to as a newborn than it does in an adult. That's why cocaine stays in a baby's body for a longer time.
Expectant mothers struggling with cocaine addiction while pregnant should seek medical help, as misuse of the drug can lead to many adverse health effects. Cocaine causes the mother to experience health risks such as:
Spontaneous miscarriage
Cardiac arrhythmia (irregular heart rhythm)
Serious psychiatric health problems
Respiratory problems.
Side effects to your baby
Birth defects:
Cocaine use include abnormalities of the brain, face, eyes, heart, skull, limbs, intestines, genitals, and urinary tract. That being said babies exposed to cocaine during pregnancy do not have a birth defect. However, the risk of a birth defect is more likely when the mother has used cocaine frequently during her pregnancy.
Cocaine lowes the supply of food and oxygen that need to reach the developing baby. The babies whose mothers use cocaine while pregnancy tend to have growth problems (weigh less, be shorter in length, and have smaller heads) than babies born without exposure to cocaine. Babies with low birth weight are more likely to die in their first month of life than are normal weight babies.
Mothers who use cocaine during their pregnancy are 2.2 times more likely to experience a stillbirth than mothers who do not.
Labour:
Cocaine can cause the placenta to pull away from the wall of the uterus before labor naturally starts called placental abruption. This can lead to heavy bleeding and can be fatal for both the mother and baby.
Permanent Brain Damage:
Cocaine also increases the risk for premature delivery before week 37. Babies who are born prematurely often start life with serious health problems, especially breathing difficulties. These babies may also have an intracranial hemorrhage (bleeding in the brain) before or soon after birth, and this can cause permanent brain damage and other disabilities.
Cocaine also causes significant central nervous system problems that may not be seen until the child is older. These effects may include problems with attention and behavioral self-control. Delays in learning, slower growth rate, language difficulties and an increased need for special education in school have been reported.
Born Addicted:
When a mother continues to abuse cocaine during the later stages of her pregnancy, the risk of addiction in the infant is big. Most babies that are born from women suffering from cocaine addiction are premature, which causes them to have a smaller head circumference, shorter in length and are underweight.
A study listed on the National Institute of Health's website states that children who were exposed to cocaine before they were born have a much higher risk of developing learning disabilities.
When you discover that you are pregnant, start prenatal care and tell your healthcare provider about your cocaine use and ask for help. If a pregnant woman is not using cocaine at the end of her pregnancy, then no increased risk for these symptoms would be expected for the newborn.
If you are worried that your baby may have health problems due to cocaine use, speak to your healthcare provider. He/she can discuss with you any available tests. An ultrasound can be used to screen for birth defects, growth of the baby and the location of the placenta. However, there are no tests that can be done prenatally to check for developmental disability. Choose a pediatrician who will care for your baby and make you feel comfortable to talk about any concerns you have.
How long does cocaine stay in your system for drug test?
You have asked this question, most likely because you have consumed cocaine recently and are worried if you may become subject to drug testing. Maybe the fear of losing your job is probably motivating you to seek out a solution.
Urine: 2-3 days (or up to 2 weeks, for heavy cocaine users)
Saliva: 1 to 2 days
Sweat: around a few weeks for cocaine or metabolite (when cutoff value is very low)
Blood: 12 hours for cocaine or 48 hours for metabolite
Hair: it stays for months
If you are a heavy cocaine user then, chronic use of cocaine leads to a buildup of cocaine.
This buildup increases the amount of time that cocaine and its metabolites stay in your system.
It is not only detectable by the amount of time, cocaine can last in your body depending on
on how long you've been using, quantity of cocain, and the type of detection method. Urine testing is the most often used testing method. Blood and saliva tests tend to have the shortest detection times, while hair tests is the longest as it can stay in the keratin of hair for months.
Cocaine is quickly absorbed after smoking with plasma concentrations peaking around 5 minutes, or 30-40 minutes if taken nasally. Cocaine is highly metabolized by enzymes in the liver and blood, and benzoylecgonine is the major metabolite of cocaine found in the urine. What matters is the amount taken, how frequently it is used, and metabolic variation, benzoylecgonine can be detected in urine for 48-96 hours after use.
Occasional User:
For an occasional cocaine user, cocaine typically remains in your body for around 2-4 days following consumption. Following this amount of time, drug tests generally will not detect cocaine in your urine.
Long Term User:
For long-term cocaine user, it's difficult to say how long cocaine will remain in your system.
The drug could be detectable in your urine after 7+ days of non-use. Cocaine's by-products such as benzoylecgonine have been detectable in urine when cocaine was consumed several weeks ago. For this reason, urine tests are popular amongst drug test facilities to employers.
The amount of time is also influenced by how you consume the drug: Orally, By snorting (intranasal), By inhalation, and Intravenously (injecting).
Traces of cocaine remain in the hair for around three months after consumption. In some instances, cocaine can remain in the hair until the hair falls out or is cut. Some drug tests will ask you to submit a hair sample for this reason.
The presence of benzoylecgonine in your system is what companies look for during drug testing. So, when your urine is shipped off to a laboratory for testing, the lab technicians will test for benzoylecgonine. But why specifically this?
Benzoylecgonine is one of cocaine's many by-products. The second cocaine is consumed via injecting, snorting or smoking, cocaine travels to your liver. Here, the liver process cocaine into several metabolites. One of which is benzoylecgonine. This then allows the body to purge cocaine from your system via your urine.
By looking for the presence of benzoylecgonine, blood and urine tests are able to detect cocaine weeks after it has left the body. It's presence in your urine is an accurate means of proving that you have taken cocaine recently. Even if cocaine leaves your urine within 2-4 days, benzoylecgonine can linger in your urine for longer periods of time, and in some instances up to 14 days after cocaine was last consumed.
Long time users will have larger levels of benzoylecgonine in their system than those who rarely use it. People who use it infrequently typically flush benzoylecgonine from their systems in a matter of a couple of days.
However, some drug tests can detect benzoylecgonine months after the last cocaine consumption, no matter what amount of cocaine was taken. These tests usually look for signs of drug use by examining hair samples.
Furthermore, cocaine kills hundreds of thousands of people each year, so it's never worth the risk because you could ultimately end up losing something much more valuable than just your job.If you feel you may be addicted to cocaine, get in touch with an AA meeting and also try a cocaine detox kit.
breastfeedingcocainedrugdrug test cocainedrugs in systemhow long will drugs stay in your system
Five ways to make easy money online
Combining CBD with Anti-Epileptic Drugs
Nehita Abraham
Hi! I'm a mindfulness expert who writes extensively on lifestyle management, wellness and ways to lead a healthier, happier life. I'm also an avid artist who spends most of my spare time dribbling amazing stories through art.
How to Avoid Burnout out Work
Nehita Abraham December 17, 2021 December 17, 2021
7 Popular Weight Loss Diet Trends Across the World in 2022
Shweta Jhawar November 20, 2021 November 21, 2021
Top 10 Amazing Benefits of Jumping Jacks
Shalini Mukherjee August 8, 2020 August 8, 2020
Remote Work Challenges & Solutions in 2022