My experience: Keyword tests are excellent ways of creating tests visually with minimal code knowledge for interacting with OnScreen objects and creating checkpoints. For testers who are not familiar with writing script code and need a way to create good, clean automation tests, Keyword Testing is an EXCELLENT way to go.
However, I ran into a recent example where a keyword test really does not do well for performing a task. While it can be done, I've found that it is more efficient to create ADO SQL Query objects, pass in a string to the query, execute, iterate through the result, and report on the results, through script code. To do all the string concatenations and such in keyword tests gets cumbersome and hard to follow. Also, if you find yourself using a lot of Code Expressions or Code Snippets in your keyword tests, it might just be as easy to write those as Script and call them as scripts.
In some of the tests I'm building, I use a combination of the two. I use the keyword tests for the onscreen interactions and use script code for some of the more complex tasks and for some of the custom validations that I need to do, blending the two, calling keyword tests from script and vice versa.